我使用以下代码从pl/python返回多个值:
CREATE TYPE named_value AS (
name text,
value integer
);
CREATE or replace FUNCTION make_pair (name text, value integer)
RETURNS named_value
AS $$
return [ name, value ]
$$ LANGUAGE plpythonu;
select make_pair('egg', 4) as column;
输出为:
column
(egg,4)
我想要做的是将输出拆分为两个单独的列。如下所示:
column, column2
egg, 4
我该怎么做呢?我用谷歌搜索了1个小时却一无所获。因此,我希望在最后添加一些搜索关键字:多个返回值、多个结果、多个列、未嵌套列表、未嵌套集合
发布于 2011-02-01 18:25:24
是的,这个的语法有点古怪,需要额外的括号:
select (make_pair('egg', 4)).name
要在仅调用函数一次的情况下从输出中获取多个组件,您可以使用子选择:
select (x.column).name, (x.column).value from (select make_pair('egg', 4) as column) x;
发布于 2011-02-02 07:35:35
SELECT * FROM make_pair('egg', 4);
以及一些变体:
SELECT name, value FROM make_pair('egg', 4) AS x;
SELECT a, b FROM make_pair('egg', 4) AS x(a,b);
发布于 2014-02-03 06:52:02
我找到的一个解决方案是使用join:
create table tmp (a int, b int, c int);
insert into tmp (a,b,c) values (1,2,3), (3,4,5), (5,12,13);
create type ispyth3 as (is_it boolean, perimeter int);
create function check_it(int, int, int) returns ispyth3 as $$
begin
return ($1*$1 + $2*$2 = $3*$3, $1+$2+$3);
end
$$ language plpgsql;
select * from tmp join check_it(a,b,c) on 1=1;
这将返回:
a | b | c | is_it | perimeter
---+----+----+-------+-----------
1 | 2 | 3 | f | 6
3 | 4 | 5 | t | 12
5 | 12 | 13 | t | 30
(3 rows)
https://stackoverflow.com/questions/4866321
复制相似问题