在执行一次查询的过程,Oracle出现ORA-22922:nonexistent LOB value 的错误;根据提示,是在查询时没有找到lob对象;
查看SQL,发现使用到了wm_concat()函数,而这个函数的返回值类型是LOB对象;
2.1 wm_concat()函数介绍:
wm_concat()函数是一个列转行函数,可以将一列的多行数据转化为一行数据,例如:
10000
9000
8500
经过wm_concat()函数转化过后 select wm_concat(salary) from employee where depno=20; 可以转换成
10000,9000,8500
并且以LOB类型返回
2.2 问题进一步分析
**虽然在wm_concat()函数外层包了一层to_char()函数,避免使用了LOB类型;但是由于wm_concat()函数的返回值类型LOB类型是不能进行group by、distinct以及union共存的,因此会偶发ORA-22922:错误。这里需要注意的是,是偶发,不是必然;
**
使用listagg(字段A,连接字符) with group(order by 字段A)来替代to_char(wm_concat(字段A))
出现这个错误很多时候是使用了wmsys.wm_concat的同时使用了group ,distinct 或者union, 本来两者没有问题,问题在于:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章