【问题标题】:Declare a variable of a table type in postgres在 postgres 中声明一个表类型的变量
【发布时间】:2016-01-25 09:05:59
【问题描述】:

我需要编写一个如下所示的存储过程:

CREATE OR REPLACE FUNCTION foo() RETURNS TABLE(user_id integer, count bigint) AS $$
    some_array integer[];
    ret_val __WHAT_TYPE_;
BEGIN
    FOR i IN 1 .. array_upper(some_array, 1)
    LOOP
        //modify the ret_val
    END LOOP;
    RETURN ret_val;
END $$
LANGUAGE plpgsql;

但是我不知道我应该声明什么类型的ret_val

【问题讨论】:

  • 我觉得你需要声明为record

标签: sql postgresql stored-procedures


【解决方案1】:

在返回表的函数中,返回值不需要变量。 表的列被视为 OUT 参数。 您可以为它们赋值并使用 RETURN NEXT,例如:

CREATE OR REPLACE FUNCTION foo() 
RETURNS TABLE(user_id integer, counts bigint) AS $$
DECLARE
    i integer;
BEGIN
    FOR i IN 1..4
    LOOP
        user_id = i;
        counts = i* i;
        RETURN NEXT;
    END LOOP;
END $$
LANGUAGE plpgsql;

SELECT * FROM foo();

 user_id | counts 
---------+--------
       1 |      1
       2 |      4
       3 |      9
       4 |     16
(4 rows)

【讨论】:

  • 非常有趣,非常感谢。但是你不能简单地解释一下 OUT 参数是什么吗?我只是以前没有遇到过这个词......
  • 了解OUT参数here
猜你喜欢
  • 1970-01-01
  • 2019-12-15
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 2020-01-15
相关资源
最近更新 更多