gpt4 book ai didi

sql - pl/pgsql 中的引用

转载 作者:行者123 更新时间:2023-11-29 12:39:18 41 4
gpt4 key购买 nike

我有一个用 pl/pgsql 编写的函数,它的工作方式与下面描述的相同:

CREATE FUNCTION reffunc(text) RETURNS refcursor AS '
BEGIN
OPEN $1 FOR SELECT col FROM test WHERE c1=$1;
RETURN $1;
END;
' LANGUAGE plpgsql;

我希望能够将其与单个选择命令一起使用,而不是记录在案的方式(使用事务):

BEGIN;
SELECT reffunc('funccursor');
FETCH ALL IN "<unnamed cursor 1>";
COMMIT;

我确信我以前能够做到这一点,但我不记得我是如何做到的,也记不起它的记录了。这可能吗?或者是否可以以无需使用 refcursor 即可输出的方式编写此函数。

我希望返回多行,并且在返回之前在函数中完成一些数据检查。因此有必要使用存储过程。

最佳答案

当然可以在没有光标的情况下返回。

例子:

CREATE FUNCTION reffunc(in_c1 text) RETURNS setof test AS '
DECLARE
temprec test;
BEGIN
FOR temprec in SELECT col FROM test WHERE c1 = in_c1 LOOP
return next temprec;
END LOOP;
RETURN;
END;
' LANGUAGE plpgsql;
select * from reffunc('funccursor');

如果您使用的是 8.4,您还可以使用更好的“RETURN QUERY”。

关于sql - pl/pgsql 中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499727/

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