我想从 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 https://dba.stackexchange.com/questions/35721/declare-variable-of-table-type-in-pl-pgsql&&http://postgres.cz/wiki/PL/pgSQL_%28en%29 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();
阅读有关的文档从函数返回 http://www.postgresql.org/docs/9.4/static/plpgsql-control-structures.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)