最近项目Oracle数据库升级由11g升到19C,在验证过程中发现wm_concat函数竟然失效了。 经过网上查询资料发现,wm_concat函数是oracle的非公开函数,在新版的oracle中不支持该函数。 1.2 解决方案 因该函数在代码中使用次数过多,在不改动代码前提下,选择重新创建该函数。建议后续在开发过程中不建议再使用该函数。 1.3 实施...
oracle 19c wm_concat替代方法 在Oracle 19c中,wm_concat函数已被弃用,因此需要使用其他方法来替代。一种常用的替代方法是使用listagg函数。listagg函数可以将多个行的值连接成一个字符串,通过指定分隔符进行分隔。 以下是使用listagg函数替代wm_concat函数的示例: 假设有一个名为employees的表,其中包含employee_id和...
在Oracle 19c中,wm_concat 函数已经被弃用,官方推荐使用 LISTAGG 函数作为替代。以下是对这一替代方案的详细解答: Oracle 19c中wm_concat函数的弃用情况: wm_concat 是一个非标准的聚合函数,用于将多个行的值连接成一个字符串。在Oracle 19c中,该函数已被弃用,意味着在未来的版本中可能会被完全移除,因此不建...
SCTX2INWM_CONCAT_IMPL)RETURNNUMBERISBEGINIF(SCTX2.CURR_STRISNOTNULL)THENSELF.CURR_STR :=SELF.CURR_STR||','||SCTX2.CURR_STR ;ENDIF;RETURNODCICONST.SUCCESS;END;END;/ 第三步 自定义行变列函数: CREATEORREPLACEFUNCTIONwmsys.wm_concat(P1VARCHAR2)RETURNVARCHAR2AGGREGATE USING wmsys.WM_CONCAT_IM...
SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER IS BEGIN IF(SCTX2.CURR_STR IS NOT NULL) THEN SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ; END IF; RETURN ODCICONST.SUCCESS; END; END; / CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2) ...
说明:在19c所在服务器处理. 2.1、wmsys用户 > conn / as sysdba > alter user wmsys account unlock; > alter user wmsys identified by Pro_ut#19; > grant connect,resource,create public synonym to wmsys; 2.2、创建wm_concat 在wmsys下创建可用的wm_concat函数. ...
是的,实际上 Oracle 11g 之后就不再推荐使用这个函数了,因为它在处理varchar2的时候会导致temp使用暴涨。 然而,很多应用程序在12c或19c中可能自定义了类似wm_concat的函数,例如 my_wm_concat。这些函数被广泛使用在应用程序中,当这些应用程序的数据库迁移到国产数据库如 MogDB 时,如果希望数据库层面兼容而不修改应...
NUMBERISBEGINRETURNVALUE := CURR_STR ;RETURN ODCICONST.SUCCESS;END;MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,SCTX2 IN WM_CONCAT_IMPL)RETURN NUMBERISBEGINIF(SCTX2.CURR_STR IS NOT NULL) THENSELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;END IF;RETURN ...
下面介绍一下我的解决方法。首先分析一下,Oracle19C不兼容vm_concat列转行函数,并不代表其它函数不兼容,或许可以找到其它代替的,通过找资料,发现了Oracle11提供的另外一个函数:listagg()函数 语法:listagg(参数,‘分隔符’) within group(order by 参数id),验证可以实现在19C正常使用 ...
朴实无华的函数 1.wm_concat 使用格式: select分组字段,wm_concat(要转换的列名)from表名groupby分组字段 实例: selectit.Code,wm_concat(it.inv)fromttt20230705 itgroupbyit.Code 2.listagg() within group() 使用格式: select分组字段,listagg(要转换的列名,',')withingroup(orderby要转换的列名)from表名gro...