我想从plpgsql函数返回表。
这是我的代码。
CREATE FUNCTION test() RETURNS my_table AS
$BODY$DECLARE
q4 my_table;
BEGIN
q4 := SELECT * FROM my_table;
RETURN q4;
END;$BODY$
LANGUAGE sql;
我收到以下错误:
Error: ERROR: syntax error at or near "SELECT"
LINE 5: q4 := SELECT * FROM my_table;
我从这个问题/教程开始。
https://dba.stackexchange.com/questions/35721/declare-variable-of-table-type-in-pl-pgsql &&
http://postgres.cz/wiki/PL/pgSQL_%28en%29
这个想法是我需要将此查询分配给一个变量。这只是我要创建的功能的一小部分。
第二个问题是如何遍历该集合并进行一些数学运算并将值分配给该表的某些字段。
但是首先我想解决这个问题。
最佳答案
CREATE FUNCTION test()
RETURNS my_table AS
$BODY$
DECLARE
q4 my_table;
BEGIN
-- add brackets to get a value
-- select row as one value, as q4 is of the type my_table
-- and limit result to one row
q4 := (SELECT my_table FROM my_table ORDER BY 1 LIMIT 1);
RETURN q4;
END;$BODY$
-- change language to plpgsql
LANGUAGE plpgsql;
sql
函数中使用变量,而应使用plpgsql
。 select query
返回行集。 使用循环的示例:
DROP FUNCTION test();
CREATE FUNCTION test()
-- change to SETOF to return set of rows, not a single row
RETURNS SETOF my_table AS
$BODY$
DECLARE
q4 my_table;
BEGIN
FOR q4 in
SELECT * FROM my_table
LOOP
RETURN NEXT q4;
END LOOP;
END;$BODY$
LANGUAGE plpgsql;
SELECT * FROM test();
阅读有关Returning From a Function的文档
关于sql - 从plpgsql函数返回行集。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32824785/