我正在使用 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/