我有一个callableStatment,执行后我得到以下错误
try{
callableStatement.executeQuery()
}
catch (Throwable t) {
throw new Exception(t);
}
finally {
closeResultSet(rs);
closeCallableStatement(callableStatement);
closeConnection(dbConnection);
}
javax.ejb.EJBTransactionRolledbackException: ORA-30926: unable to get a stable set of rows in the source tables
过了一段时间后,我得到了“Too man open cursors”的数据库错误
我知道该程序因重复而抛出错误,我想知道为什么游标没有关闭,因为它似乎最终阻塞不是我需要的东西以及关闭它们的正确方法
答案 0 :(得分:0)
executeQuery()的返回类型是您尚未指定的ResultSet。尝试将其作为
ResultSet rst = callableStatement.executeQuery();
希望它有所帮助。 :)
答案 1 :(得分:0)
我认为您正在执行合并查询,并且返回的行ID超过1个。这就是这种例外的原因。此外,当返回第一个重复行时,会抛出异常。在查询甚至执行之前,您正试图关闭它。这应该是光标未正确关闭的原因。尝试在查询中添加一个不同的关键字,以避免重复。例如:MERGE INTO table_1一个USING(SELECT distinct ta.ROWID row_id FROM table_1 a,table_2 b,table_3 c WHERE)src ON(a.ROWID = src.row_id)当匹配时;由于涉及回滚,它会在系统异常。并且不会回滚应用程序异常。