gpt4 book ai didi

sql - 从 plpgsql 函数返回行集。

转载 作者:行者123 更新时间:2023-11-29 11:32:10 25 4
gpt4 key购买 nike

我想从 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
  • 您可以为变量分配单个值,而选择查询返回行集。
  • 您必须选择一行作为一个值,因为变量是复合类型。

使用循环的例子:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com