后臺(tái)報(bào)出如下錯(cuò)誤:
Caused by: java.sql.SQLException: ORA-00604: 遞歸 SQL 級(jí)別 1 出現(xiàn)錯(cuò)誤
ORA-01000: 超出打開(kāi)游標(biāo)的最大數(shù)
ORA-00604: 遞歸 SQL 級(jí)別 1 出現(xiàn)錯(cuò)誤
ORA-01000: 超出打開(kāi)游標(biāo)的最大數(shù)
ORA-01000: 超出打開(kāi)游標(biāo)的最大數(shù)
原因:
這個(gè)錯(cuò)誤一般出現(xiàn)在利用代碼循環(huán)執(zhí)行數(shù)據(jù)庫(kù)命令(例如將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)或者定時(shí)任務(wù)向數(shù)據(jù)庫(kù)中插入數(shù)據(jù))時(shí),例如在java中 1.建立一個(gè)Connection 2.循環(huán)創(chuàng)建PReparedStatement,并執(zhí)行數(shù)據(jù)導(dǎo)入 3.關(guān)閉OracleConnection當(dāng)?shù)诙降难h(huán)數(shù)比較小時(shí),代碼運(yùn)行正常。當(dāng)循環(huán)數(shù)超過(guò)一定值(例如300),代碼就會(huì)出錯(cuò)。提示:ORA-01000:超出打開(kāi)游標(biāo)的最大數(shù)
Oracle數(shù)據(jù)庫(kù)中打開(kāi)的游標(biāo)最大數(shù)為一定值,默認(rèn)情況下是300,當(dāng)代碼到第二步時(shí),循環(huán)中一個(gè)PreparedStatement占用了一個(gè)數(shù)據(jù)庫(kù)游標(biāo),執(zhí)行的循環(huán)超過(guò)這個(gè)數(shù)時(shí)就會(huì)產(chǎn)生游標(biāo)數(shù)目溢出錯(cuò)誤。
解決辦法:
第二步循環(huán)中每次執(zhí)行完P(guān)reparedStatement,都將PreparedStatement.close()下,釋放掉這個(gè)資源就好了此外,也可以修改數(shù)據(jù)庫(kù)的最大游標(biāo)數(shù),不過(guò)這個(gè)方法治標(biāo)不治本。(alter system set open_cursors=1000 scope=both;)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注