【问题标题】:Function returning cursor in PL/SQL - close it on Java's side or PL/SQL's side?在 PL/SQL 中返回游标的函数 - 在 Java 端或 PL/SQL 端关闭它?
【发布时间】:2016-03-24 08:41:13
【问题描述】:

我正在使用 Java 调用 PL/SQL 中的存储函数,该函数返回 REF CURSOR

FUNCTION getApprovers RETURN approvers_cursor IS
    approvers approvers_cursor;
BEGIN
    OPEN approvers FOR
        select * from role where role_name = 'APPROVER';
    RETURN approvers;
END;

如果我在RETURN approvers 之前关闭光标

CLOSE approvers;
RETURN approvers;

我在 Java 中收到警告 - Cursor is Closed

我似乎无法关闭 PL/SQL 存储函数中的游标。那么光标的关闭发生在哪里呢?

【问题讨论】:

  • 完成后需要致电ResultSet.close()
  • 结果集游标;就像您直接执行 select 查询一样。

标签: java sql jsp jdbc plsql


【解决方案1】:

事实上,ResultSets 游标。

 //JAVA                            //PL/SQL
 PreparedStatement ps = con.prepareStatement(
            "select * from role where role_name = ?");
 ps.setString(1, "APPROVER");
 ResultSet rs = ps.executeQuery(); //OPENS the cursor
 while(rs.next()) {                //FETCHES next row from cursor
    //Handle resultset
 }
 rs.close();                       //CLOSES the cursor

当然,从 Java 7 开始,您可以使用 try-with-resource 来执行此操作并隐藏 close() 调用 - 但为了清楚起见,这里写的旧样式是什么

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2019-05-03
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多