Oracle列转行函数vm_concat在19C版本不兼容解决方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle列转行函数vm_concat在19C版本不兼容解决方案相关的知识,希望对你有一定的参考价值。
参考技术A 本文记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的。不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不是特别好。这个函数在Oracle12C是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用。最近开发场景遇到这个问题,可以写到了自定义列转行函数的办法去解决。但是这种办法并不一定适用所有的业务场景。解决方案
通过自定义函数解决也是可以的,不过我并不是这样做的。 下面介绍一下我的解决方法。首先分析一下,Oracle19C不兼容vm_concat列转行函数,并不代表其它函数不兼容,或许可以找到其它代替的,通过找资料,发现了Oracle11提供的另外一个函数:listagg()函数 语法:listagg(参数,‘分隔符’) within group(order by 参数id),验证可以实现在19C正常使用
例如:
to_char(wm_concat(t.busi_id))
可以改写成:
to_char(listagg(t.busi_id,',' ) within GROUP (order by (t.busi_id)))
SQL如:
SELECT listagg(t.busi_id, ',') within GROUP(order by (t.busi_id))
FROM sys_cdc_sync_record t
WHERE cdc_sql_type = 'INSERT_SELECT'
以上是关于Oracle列转行函数vm_concat在19C版本不兼容解决方案的主要内容,如果未能解决你的问题,请参考以下文章