微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL函数或输出多列的存储过程?

这是我最理想的想法.想象一下,我有一个表A.

我想要做

SELECT A,func(A) FROM table

并且输出要说4列.

有没有办法做到这一点?我已经看到了自定义类型的东西,或者让你得到一个结果的样子

A,(B,C,D)

但是如果我可以让一个函数返回多个列,那么这将是非常好的.

有什么可以做这样的事情吗?

如果函数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

原文地址:https://www.jb51.cc/postgresql/192566.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐