ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ORA-22922:nonexistent LOB value问题及listagg()函数

2021-10-17 15:04:28  阅读:367  来源: 互联网

标签:LOB listagg 函数 wm value 字段 group concat


现象及错误信息

在执行一次查询的过程,Oracle出现ORA-22922:nonexistent LOB value 的错误;根据提示,是在查询时没有找到lob对象;

2 问题分析

查看SQL,发现使用到了wm_concat()函数,而这个函数的返回值类型是LOB对象;

2.1 wm_concat()函数介绍:

wm_concat()函数是一个列转行函数,可以将一列的多行数据转化为一行数据,例如:

 salary
-------
  10000
   9000
   8500

经过wm_concat()函数转化过后 select wm_concat(salary) from employee where depno=20; 可以转换成

  salary
-------
10000,9000,8500

并且以LOB类型返回

2.2 问题进一步分析

虽然在wm_concat()函数外层包了一层to_char()函数,避免使用了LOB类型;但是由于wm_concat()函数的返回值类型LOB类型是不能进行group by、distinct以及union共存的,因此会偶发ORA-22922:错误。这里需要注意的是,是偶发,不是必然;

3 解决方式

使用listagg(字段A,连接字符) with group(order by 字段A)来替代to_char(wm_concat(字段A))

4 总结

出现这个错误很多时候是使用了wmsys.wm_concat的同时使用了group ,distinct 或者union, 本来两者没有问题,问题在于:

  1. Oracle Database 10g Enterprise Edition Release 10.2.0.5.0以后的版本wmsys.wm_concat查询出的是LOB类型
  2. oralce的SQL语句中若查询了LOB字段是不能使用distinct,union,和group by等关键字的。
  3. 并且在12C 以后,Oracle官方软件不再提供wm_concat函数,因此从兼容性上来看,也不建议使用wm_concat.

参考:https://www.cnblogs.com/halberd-lee/p/13221548.html

标签:LOB,listagg,函数,wm,value,字段,group,concat
来源: https://www.cnblogs.com/wsxdev/p/15416946.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有