【问题标题】:Is having RefCursor as an OUT parameter of a Postgresql function, allowed?是否允许将 RefCursor 作为 Postgresql 函数的 OUT 参数?
【发布时间】:2018-03-10 09:44:20
【问题描述】:

我知道以下是可能的。即我可以在 Postgresql 中将 ref 游标作为返回值。

CREATE FUNCTION employeefunc(int) RETURNS refcursor AS '
DECLARE ref refcursor;  
BEGIN
OPEN ref FOR SELECT * FROM employee where id = $1;
RETURN ref;
END;

但是我们可以在 postgresql 函数中将 ref 游标作为 OUT 参数吗?

供您参考,遵循我正在寻找的 Oracle 等效项。

create or replace procedure employeefunc(rc out sys_refcursor) as
begin
open rc for 'select * from employee';
end;

【问题讨论】:

    标签: postgresql stored-procedures plsql stored-functions ref-cursor


    【解决方案1】:

    像 Oracle PL/SQL 这样的 Postgresql 中没有 CREATE PROCEDURE。您可以使用OUT 参数创建FUNCTIONREFCURSOR,但RETURN TYPE 应指定为REFCURSOR

    CREATE FUNCTION employeefunc (rc_out OUT refcursor)
    RETURNS refcursor
    AS
    $$
    BEGIN
        OPEN rc_out
        FOR
        SELECT *
        FROM employees;
    END;
    $$ LANGUAGE plpgsql;
    

    如您所见,没有RETURN 声明。这是因为如果函数有 OUT 变量,则不能使用带有 RETURN 语句结束函数,但使用简单的 RETURN; 是有效的。

    【讨论】:

    • 感谢您的解释!我有另一个问题。假设我通过 java 调用这个过程。为了获得作为 OUT 参数或 RETURN 语句返回的引用游标,在这两种情况下,我们都必须注册一个 out 参数 (statment.registerOutParameter)。以上说法正确吗?
    • @Snitch:不客气。至于你的问题,Java 不是我的领域。您可以在 Google 上搜索它或将其作为一个单独的问题提出。
    • 酷,再次感谢 Kaushik!如果我得到许可,我也会投票!你节省了我很多时间!
    【解决方案2】:

    Postgresql 存储过程不像其他服务器那样支持 OUT 参数。但它支持 INOUT 参数,我们可以使用这些参数来执行输出任务。

    注意:Postgresql 中的存储过程是在Version 11中引入的;因此,如果您使用的是早期版本,请在使用存储过程之前对其进行升级。

    谢谢!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多