java.sql.SQLException: ORA-01000: 超出打開遊标的最大數
問題在一個大資料量的嵌套循環下 close() 關閉 createStatement() 根本無效,即使把執行過程封裝在類裡,而用循環來調用類也會有問題。
原因:
close() 後遊标裡緩存的資源并不會被釋放,而是傳回給資料庫連接配接池,直到退出最外層的循環,才會自動被釋放。
解決方案:
方案一: 如果資料庫不是超級大,一般通過直接在資料庫裡調大 open_cursors 遊标參數可解決問題。
方案二: 超大資料量的話,要拆分大量資料為小量的資料,把循環放在類裡進行封裝,最後把結果拼起來就好了。
show parameter open_cursors;
可以檢視遊标的最大值。
alter system set open_cursors=5000 scope=both;
可以設定遊标的最大值。
喜歡的點個贊❤吧!