sql - 调用返回 refcursor 的函数

标签 sql postgresql plpgsql database-cursor ref-cursor

我正在使用 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 所述, 我可以声明我自己的游标名称并使用这个游标名称来操作返回的游标而不是 Postgresql 自动为我生成吗?

如果没有,有什么命令可以获取生成的游标名称吗?

最佳答案

我不太确定在哪个版本的 Postgre 中这是可用的(在 8.4 中它是有效的)但是我发现在声明它时定义游标名称非常简单,如下所示:

CREATE OR REPLACE FUNCTION function_1() RETURNS refcursor AS $$
DECLARE
        ref_cursor REFCURSOR := 'mycursor';
BEGIN
        OPEN ref_cursor FOR SELECT * FROM some_table;
        RETURN (ref_cursor);    
END;
$$ LANGUAGE plpgsql;

然后你可以这样得到它:

BEGIN;
SELECT function_1();
FETCH 4   from  mycursor; 
COMMIT;

我觉得这个方法不那么麻烦。 希望对您有所帮助。

关于sql - 调用返回 refcursor 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674787/

相关文章:

ruby-on-rails - Ruby 中的 Sql 值数组

database - 游标可以在 PL/pgSQL 中保存变量吗?

postgresql - 将 CSV 文件中的内容加载到 PostgreSQL 表中

java - 如何去掉java sql语句中的许多占位符(问号)

php - 在 codeigniter 中转换复杂的 JOIN 查询

php - 了解准备好的语句 - PHP

postgresql - PostgreSql 的有线协议(protocol)

java - 在 Equinox 中配置 PostgreSQL 数据源时的 NPE

postgresql - 从 INSERT 或 SELECT 获取 id

mysql - 从 MYSQL 将数据输入到 Google 柱形图中的 2 个以上的列。