sql – 调用一个返回refcursor的函数

前端之家收集整理的这篇文章主要介绍了sql – 调用一个返回refcursor的函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 Postgresql 8.3,并具有以下简单的函数,将返回一个refcursor到客户端
CREATE OR REPLACE FUNCTION function_1() RETURNS refcursor AS $$
DECLARE
        ref_cursor REFCURSOR;
BEGIN
        OPEN ref_cursor FOR SELECT * FROM some_table;
        RETURN (ref_cursor);    
END;
$$LANGUAGE plpgsql;

现在,我可以使用以下sql命令调用函数并操作返回的游标,但游标名称由Postgresql自动生成

BEGIN;
SELECT function_1();  --It will output the generated cursor name,for example,"<unnamed portal 11>" ;
FETCH 4   from  "<unnamed portal 11>"; 
COMMIT;

此外,明确声明游标名称作为函数的输入参数,如38.7.3.5. Returning Cursors.Can所述.我声明自己的游标名称,并使用此游标名称来操作返回的游标而不是Postgresql为我自动生成?如果没有,有没有可以获得生成的游标名称的命令?

解决方法

是的,使用:
CREATE OR REPLACE FUNCTION function_1(refcursor) RETURNS refcursor AS $$
BEGIN
        OPEN $1 FOR SELECT * FROM some_table;
        RETURN $1;    
END;
$$LANGUAGE plpgsql;

结果:

SELECT function_1('myowncursorname');
   function_1
-----------------
 myowncursorname
(1 row)

看起来自动生成名称是< unnamed portal n>,其中n是自然数(从1).

编辑:

另一种方法可以使用这样查询pg_cursors视图来获取生成的游标名称

SELECT name FROM pg_cursors WHERE statement LIKE 'SELECT * FROM some_table';

例如:

BEGIN;
SELECT function_1();
SELECT name FROM pg_cursors WHERE statement LIKE 'SELECT * FROM some_table';
COMMIT;

结果:

function_1
--------------------
 <unnamed portal 3>
(1 row)

        name
--------------------
 <unnamed portal 3>
(1 row)
原文链接:https://www.f2er.com/mssql/75466.html

猜你在找的MsSQL相关文章