在postgres中声明一个表类型的变量

时间:2016-01-25 09:06:00

标签: sql postgresql stored-procedures

我需要编写一个存储的procudere,如下所示:

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

1 个答案:

答案 0 :(得分:2)

在返回表的函数中,您不需要返回值的变量。 表的列被视为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)