oracle-ORA-22922: 不存在的 LOB 值

素颜马尾好姑娘i 2022-12-27 01:57 511阅读 0赞

项目进行对于多行数据某个列数据转换为一个字符串查询时,出现【ORA-22922: 不存在的 LOB 值】异常信息,具体异常栈

  1. 根据项目信息获取指出调剂列表: ### Error querying database. Cause: java.sql.SQLException: ORA-22922: 不存在的 LOB 值 ### The error may exist in URL [jar:file:/E:/Tomcat/Tomcat%208.5/webapps/czept/WEB-INF/lib/rap-back-czept-3.0.0-SNAPSHOT.jar!/com/ifugle/rap/czept/glzx/xml/CzeptBsdtZctjMapper.xml] ### The error may involve com.ifugle.rap.czept.glzx.mapper.CzeptBsdtZctjMapper.selectCzeptZysjZctjDetailPagination-Inline ### The error occurred while setting parameters ### SQL: select * from ( select row_.*, rownum rownum_ from ( SELECT T.* FROM V_CZEPT_ZCTJ_DETAILS T WHERE T.ID != ? AND T.LX = ? AND INSTR(T.PROGRAMCODE, ?)>0 ) row_ ) where rownum_ <= 20 and rownum_ > 10 ### Cause: java.sql.SQLException: ORA-22922: 不存在的 LOB 值 ; uncategorized SQLException for SQL []; SQL state [99999]; error code [22922]; ORA-22922: 不存在的 LOB 值 ; nested exception is java.sql.SQLException: ORA-22922: 不存在的 LOB 值

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RneGluXzYwNQ_size_16_color_FFFFFF_t_70

奇怪的是,核心查询sql语句为

20201207143603220.png

在pl/sql执行查询时,一点问题都没有,但是一在前后台联调就发生错误!!!!

经过查询得知是:原因是用了wm_concat函数,转换后是clob类型,导致报表查询时报错。

oracle数据库在行转列函数,不但提供了wm_concat函数,也提供了listagg函数!那对该场景查询更换转换方式,把WM_CONCAT(DISTINCT M.XM_DM) AS PROGRAMCODE**修改为 LISTAGG(M.XM_DM, ‘,’)WITHIN GROUP (ORDER BY M.XM_DM) AS PROGRAMCODE**,再进行执行,问题完美解决!

所以在ORACLE数据库中进行行转列一定注意用法,要不一不小心就进坑!







LISTAGG基础的用法如下:

LISTAGG(列名,分隔符) WITHIN GROUP( ORDER BY 列名)

列名:需要拼接的数据表中的字段

分隔符:以什么字符分割,例如逗号,分号等字符

它的用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。

总结一下:

  1. wm_cancat函数行转列后,不会按照原有查询结果排序。listagg函数行转列后,会按照原有查询结果顺序排列。
  2. 如果考虑到需要行转列,并且保持分组后顺序不变可以使用listagg来完成。

-———————————————————————————————————-
作者:超级字节码
来源:CSDN
原文:https://blog.csdn.net/dgxin\_605/article/details/110818261
版权声明:本文为博主原创文章,转载请附上博文链接!

-———————————————————————————————————-

发表评论

表情:
评论列表 (有 0 条评论,511人围观)

还没有评论,来说两句吧...

相关阅读