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函数一定要写在最外层。

【例子】: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;

posted @ 2018-07-30 16:09  行远自迩  阅读(140)  评论(0编辑  收藏  举报