我需要编写一个存储的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
?
答案 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)