REFCURSOR用PL / pgSQL
-
19-09-2019 - |
题
我已经写在一个函数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;
我相信我已经能够之前做到这一点,但是我怎么也想不起我都做到了,或者发现它记录。这可能吗?或者是有可能以这样一种方式,它可以在不使用一个指针被输出到写该功能。
要返回我期待多行并返回之前的一些数据检查是在函数中完成的。因此有必要对使用的存储过程的。
解决方案
不确定它是可能的,而不光标返回。
示例:
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,你也可以用“返回查询”,这是更漂亮。
其他提示
create or replace function reffunc(in_c1 text)
returns setof refcursor as
$body$
declare
temprec refcursor;
/*
MODULE NAME DEVELOPER NAME CREATED DATE MODIFIED DATE
MOHAMMED SHAKIR 9-6-2011
*/
Begin
open temprec for
select col from test where c1 = in_c1;
RETURN NEXT REF1;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE
不隶属于 StackOverflow