PostgreSQL函数或输出多列的存储过程?
发布时间:2020-12-13 16:26:08 所属栏目:百科 来源:网络整理
导读:这是我最理想的想法.想象一下,我有一个表A. 我想要做: SELECT A,func(A) FROM table 并且输出要说4列. 有没有办法做到这一点?我已经看到了自定义类型的东西,或者让你得到一个结果的样子 A,(B,C,D) 但是如果我可以让一个函数返回多个列,那么这将是非常好的.
这是我最理想的想法.想象一下,我有一个表A.
我想要做: SELECT A,func(A) FROM table 并且输出要说4列. 有没有办法做到这一点?我已经看到了自定义类型的东西,或者让你得到一个结果的样子
但是如果我可以让一个函数返回多个列,那么这将是非常好的. 有什么可以做这样的事情吗?
如果函数func只返回1行3个值,例如:
CREATE OR REPLACE FUNCTION func ( input_val integer,OUT output_val1 integer,OUT output_val2 integer,OUT output_val3 integer ) AS $$ BEGIN output_val1 := input_val + 1; output_val2 := input_val + 2; output_val3 := input_val + 3; END; $$LANGUAGE plpgsql; 然后你执行SELECT a,func(a)FROM table1你会得到: a | func integer | record ========|========== 1 | (2,3,4) 2 | (3,4,5) 3 | (4,5,6) 但是,如果您执行: SELECT a,(f).output_val1,(f).output_val2,(f).output_val3 FROM (SELECT a,func(a) AS f FROM table1) AS x 你会得到: a | output_val1 | output_val2 | output_val3 integer | integer | integer | integer ========|=============|=============|============= 1 | 2 | 3 | 4 2 | 3 | 4 | 5 3 | 4 | 5 | 6 或者,使用CTE(通用表表达式),如果执行: WITH temp AS (SELECT a,func(a) AS f FROM table1) SELECT a,(f).output_val3 FROM temp 你也会得到: a | output_val1 | output_val2 | output_val3 integer | integer | integer | integer ========|=============|=============|============= 1 | 2 | 3 | 4 2 | 3 | 4 | 5 3 | 4 | 5 | 6 注意:您也可以使用以下查询获得相同的结果: SELECT a,(f).* FROM (SELECT a,func(a) AS f FROM table1) AS x 要么 WITH temp AS (SELECT a,(f).* FROM temp (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |