日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORACLE 11g 使用ROWNUM完美解决ORA-00600:内部错误代码

發布時間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE 11g 使用ROWNUM完美解决ORA-00600:内部错误代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?轉載自:https://blog.csdn.net/mchdba/article/details/69938675

1,ORA-00600:內部錯誤代碼

Oracle從11.2.0.1升級到11.2.0.4,開發人員報告說一個job運行失敗,調試有報錯信息,ORA-00600:內部錯誤代碼,參數:[rwoirw: check ret val],[],[],[],[],ORA-06512:…,如下圖所示:

查看這個2000行的包體,查看到454行代碼是一個create table as的很長的sql,?

?

2,官方的解決途徑不是最佳方案

是動態sql執行的,創建一個表出錯的問題,在11.2.0.1的version里面是ok的,到了11.2.0.4就出問題了,google了下,說是11.2.0.4的一個bug。

?

官方對該bug的描述如下,并提供了2種解決途徑:

Refrence:Bug 14275161 - ORA-600 [rwoirw:check ret val] on CTAS with predicate move around (Doc ID 14275161.8)

?

?

第一種是升級到12.1:

??--》這個剛升級完11.2.0.4再升級到12.1顯然不太合適,而且萬一到了12.1,又有新的bug出現,那就比較麻煩了。


第二種方法:通過設置隱含參數 _pred_move_around 為false來繞過該錯誤

??????????--》這個也嘗試過了,不行,存儲過程的動態sql里面,添加 altersystem set _pred_move_around =false;后報下面的錯誤出來:

SQL> call PKG_ADS_AMP_PD.build(); call PKG_ADS_AMP_PD.build() ORA-04068: existing state of packages has been discarded ORA-04061: existing state of package body "DW.PKG_ADS_AMP_PD" has been invalidated ORA-04065: not executed, altered or dropped package body "DW.PKG_ADS_AMP_PD"SQL>


3,使用ROWNUM完美解決

??

思考了下,也許11.2.0.4里面對create tablexxx as select …. From …的限制比較嚴格(或者也許就是真的一個bug?),意味著在不知道后面的select … from …的總體數量的情況下或者數量已經超過了oracle的默認值比如1000這樣,會提示ORA-00600的錯誤。按照這個思路我查詢出來select … from ..的總數量,在后面加上and rownum<100000;,再次執行存儲過程,哎,天降奇瑞,成功了。

?

然后再發散思維下,萬一下回select的總數量超過100000了呢,那咋辦,總不能每次都去select count(1) from …然后再create吧。按照測試的邊界值理論,一個最大值ok了,那我嘗試下最小值呢,用and rownum>-1;(因為有可能select 出來空記錄)呢?嘗試了下,存儲過程執行成功了,and rownum>-1

總結

以上是生活随笔為你收集整理的ORACLE 11g 使用ROWNUM完美解决ORA-00600:内部错误代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。