MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUT WM_CONCAT_IMPL, SCTX2INWM_CONCAT_IMPL)RETURNNUMBERISBEGINIF(SCTX2.CURR_STRISNOTNULL)THENSELF.CURR_STR :=SELF.CURR_STR||','||SCTX2.CURR_STR ;ENDIF;RETURNODCICONST.SUCCESS;END;END;/--自定义行变列函数:CREATEORREPLACEFUNCTIONwm_concat(P1VARCHAR2)RETUR...
2.把所有源码中存在WMSYS.WM_CONCAT,替换为WM_CONCAT。 3.创建OBJECT WM_CONCAT_IMPL CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT -- AUTHID CURRENT_USER AS OBJECT ( CURR_STR VARCHAR2(32767), STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER, MEMBER FUNCTION O...
conn wmsys/123456 --在wmsys下创建可用的wm_concat函数,直接执行以下语句 --定义类型 CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT ( CURR_STR VARCHAR2(32767), STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_...
SELECTdepartment_id, wm_concat(first_name||' '||last_name)ASemployee_namesFROMemployeesGROUPBYdepartment_id; 这个查询会根据部门ID(department_id)对员工进行分组,并将每个部门的员工姓名(first_name和last_name)合并成一个字符串。注意,我们使用了字符串连接操作符(||)来连接名字和姓氏。 然而,需要注意的是...
当我们的程序需要连接12C数据库时,原本使用wm_concat函数的地方会出现报错,这是由于12C已经摒弃了wm_concat这个函数,可以采取的办法有使用listagg函数代替wm_concat函数,但是程序中所有涉及wm_concat函数的地方都得改成listagg函数的写法,所以为了减小修改程序的工作量,可以通过手工创建wm_concat函数来解决这个问题。
在开源 PostgreSQL 版本中有string_agg函数实现类型功能,MogDB 中除了支持string_agg之外,同时还支持listagg(是的,你没有看错,还兼容 Oracle 12c的listagg函数),也自带了wm_concat。但需要注意的是,MogDB 中vm_concat函数不支持像 Oracle 一样的synonym给个别名,需要创建函数。
直接解密Oracle11G的原始程序,执行OK CREATEORREPLACETYPEwm_concat_new AUTHIDCURRENT_USERASOBJECT(CURR_STR VARCHAR2(32767),CURR_STR_C CLOB,STATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTwm_concat_new)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTwm_concat_new,P1 VARCHAR2)RETURNNUMBER,MEMBERFUNCTION...
使用listagg within代替wm_concat,例子如下: 原wm_concat: selectwmconcat(T.TABLE_NAME,',')fromuser_tables tWHERET.TABLE_NAMELIKE'ST_TAB%'order by t.TABLE_NAME 等价于如下SQL: selectlistagg(T.TABLE_NAME,',')withingroup(order by t.TABLE_NAME)tablesfromuser_tables tWHERET.TABLE_NAMELIKE'ST_...
Oracle列转行函数wm_concat版本不兼容解决方案 业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的。不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不是特别好。这个函数在Oracle12是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用。最近...
oracle12c中wm_concat函数问题解决 一.解锁wmsys用户,sys用户登录7.0.143.149:1521/pdbups alteruser wmsys accountunlock;二.创建包、包体和函数 以wmsys用户登录数据库7.0.143.149:1521/pdbups,执行下面的命令 CREATEORREPLACE NONEDITIONABLE TYPE WM_CONCAT_IMPL ASOBJECT -- AUTHID CURRENT_USER AS OBJECT ...