java - 函数在 PL/SQL 中返回游标 - 在 Java 端或 PL/SQL 端关闭它?

标签 java sql jsp jdbc plsql

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

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游标。

 //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() 调用 - 但为了清楚起见,这里写的旧式是什么

关于java - 函数在 PL/SQL 中返回游标 - 在 Java 端或 PL/SQL 端关闭它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34342052/

相关文章:

javascript - datepicker 在 Internet Explorer 8 中是透明的

javascript - jquery 表过滤器脚本不工作

java - Tomcat 错误 : Resource Not Available (HTTP 404)

java - ANTLR 语法中的歧义

java - 为什么在尝试运行我的应用程序时会收到 NoClassDefFoundError?

mysql - 查询结果的where子句

php - mysql中 '-'和 '&'字符串的问题

java - onActivityResult 永远不会被调用

java - 跳过 try catch 语句?

c# - 错误 : There is already an open DataReader associated with this Command which must be closed first