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

前端之家收集整理的这篇文章主要介绍了PostgreSQL函数或输出多列的存储过程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我最理想的想法.想象一下,我有一个表A.

我想要做:

  1. SELECT A,func(A) FROM table

并且输出要说4列.

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

A,(B,C,D)

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

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

如果函数func只返回1行3个值,例如:
  1. CREATE OR REPLACE FUNCTION func
  2. (
  3. input_val integer,OUT output_val1 integer,OUT output_val2 integer,OUT output_val3 integer
  4. )
  5. AS $$
  6. BEGIN
  7. output_val1 := input_val + 1;
  8. output_val2 := input_val + 2;
  9. output_val3 := input_val + 3;
  10. END;
  11. $$LANGUAGE plpgsql;

然后你执行SELECT a,func(a)FROM table1你会得到:

  1. a | func
  2. integer | record
  3. ========|==========
  4. 1 | (2,3,4)
  5. 2 | (3,4,5)
  6. 3 | (4,5,6)

但是,如果您执行:

  1. SELECT a,(f).output_val1,(f).output_val2,(f).output_val3
  2. FROM (SELECT a,func(a) AS f FROM table1) AS x

你会得到:

  1. a | output_val1 | output_val2 | output_val3
  2. integer | integer | integer | integer
  3. ========|=============|=============|=============
  4. 1 | 2 | 3 | 4
  5. 2 | 3 | 4 | 5
  6. 3 | 4 | 5 | 6

或者,使用CTE(通用表表达式),如果执行:

  1. WITH temp AS (SELECT a,func(a) AS f FROM table1)
  2. SELECT a,(f).output_val3 FROM temp

你也会得到:

  1. a | output_val1 | output_val2 | output_val3
  2. integer | integer | integer | integer
  3. ========|=============|=============|=============
  4. 1 | 2 | 3 | 4
  5. 2 | 3 | 4 | 5
  6. 3 | 4 | 5 | 6

注意:您也可以使用以下查询获得相同的结果:

  1. SELECT a,(f).*
  2. FROM (SELECT a,func(a) AS f FROM table1) AS x

要么

  1. WITH temp AS (SELECT a,(f).* FROM temp

猜你在找的Postgre SQL相关文章