我想从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/

    10-10 17:20