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版本不兼容解决方案的主要内容,如果未能解决你的问题,请参考以下文章

oracle列转行函数

oracle 列转行

Oracle列转行,行转列

Oracle 列转行函数 Listagg()

oracle行转列,列转行函数的使用(listagg,xmlagg)

关于ORACLE列转行的问题