我已经写在一个函数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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top