ORA-22922:nonexistent LOB value錯誤解決方案


【說明】:一般提示此類錯誤說明在取大類型字段時(如:clob)進行了類型轉換或者數據截取(如:to_char,substr等),

     而轉換列的數據值為NULL。

【解決】:我遇到的這個問題的使用原因在於使用了WM_CONCAT(列轉行)函數時數據字段過長,只想截取保留部分長度。

     那么這時是不能使用to_char函數的,因為to_char和WM_CONCAT分配的內存大小不一致,也會報類似的錯誤。

       此時改用了DBMS_LOB.SUBSTR函數,問題還未解決。

     問題發生在SQL做了嵌套,這時DBMS_LOB.SUBSTR函數一定要寫在最外層。

【總結】:1、如果使用了to_char函數時,只有在字符串長度超過4000時才會顯露問題,很難查。
     2、WM_CONCAT行轉列時數據為NULL時,問題才暴露出來。

【例子】:SELECT A.* FROM (SELECT DBMS_LOB.SUBSTR(WM_CONCAT(B.F1),2000,1) FF1,

         DBMS_LOB.SUBSTR(WM_CONCAT(DISTINCT B.F2),2000,1) FF2 FROM B)A;

        改成

       SELECT DBMS_LOB.SUBSTR(A.FF1,2000,1) F1,DBMS_LOB.SUBSTR(A.FF2,2000,1) F2

         FROM (SELECT WM_CONCAT(B.F1) FF1,WM_CONCAT(DISTINCT B.F2)FF2 FROM B)A;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM