从 plpgsql 函数返回行集。

2024-02-13

我想从 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(使用前将#替换为@)

从 plpgsql 函数返回行集。 的相关文章

随机推荐