后台報出如下錯誤:
Caused by: java.sql.SQLException: ORA-00604: 遞歸 SQL 級別 1 出現錯誤
ORA-01000: 超出打開游標的最大數
ORA-00604: 遞歸 SQL 級別 1 出現錯誤
ORA-01000: 超出打開游標的最大數
ORA-01000: 超出打開游標的最大數
原因:
這個錯誤一般出現在利用代碼循環執行數據庫命令(例如將數據導入到數據庫或者定時任務向數據庫中插入數據)時,例如在java中
1.建立一個Connection
2.循環創建PreparedStatement,並執行數據導入
3.關閉OracleConnection
當第二步的循環數比較小時,代碼運行正常。當循環數超過一定值(例如300),代碼就會出錯。提示:
ORA-01000: 超出打開游標的最大數
Oracle數據庫中打開的游標最大數為一定值,默認情況下是300,當代碼到第二步時, 循環中一個PreparedStatement占用了一個數據庫游標,執行的循環超過這個數時就會產生游標數目溢出錯誤。
解決辦法:
第二步循環中每次執行完PreparedStatement,都將PreparedStatement.close()下,釋放掉這個資源就好了
此外,也可以修改數據庫的最大游標數,不過這個方法治標不治本。( alter system set open_cursors=1000 scope=both; )