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