我有一个用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;
我希望能够在单个select命令中使用它,而不是使用(使用事务)的文档化方式:
BEGIN;
SELECT reffunc('funccursor');
FETCH ALL IN "<unnamed cursor 1>";
COMMIT;
我确信我以前能够做到这一点,但是我不记得我是怎么做到的,或者发现它有记录。这可能吗?或者是否可以以不使用refcursor的方式输出它来编写此函数。
我希望返回多行,并在返回之前在函数中完成一些数据检查。因此需要使用存储过程。
答案 0 :(得分:3)
当然可以在没有光标的情况下返回。
示例:
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,你也可以使用“返回查询”,这甚至更好。
答案 1 :(得分:1)
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