想当年,在我们需要将某字段多行内容拼接起来的时候,wm_concat提供了很好的方法 这使得这个未公开的函数,得到了广泛的宣传与运用 但是,不公开,英文是undocumented,就意味着随时可能发生变更...10.2.0.5上,其返回类型从varchar2变为了clob 而在12c当中,干脆就取消了此函数 优先: listagg(11g) > stragg(tomkyte) > 自定义PLSQL函数 > wm_concat
Oracle 尽量使用LISTAGG代替WM_CONCAT 测试数据 SELECT * FROM TEST_IGNORE; 使用wm_concat SELECT T.RCLASS, WMSYS.WM_CONCAT...T.BANK ORDER BY T.ID) AS RN FROM TEST_IGNORE T) T WHERE RN = 1) T GROUP BY RCLASS; wm_concat...可能会因为数据库版本的不同 返回clob或者varcahr2字段,增加线上报错概率比如ORA-22922 wm_concat聚合的字段没有固定的顺序,listagg可以根据字段排序 listagg的性能比...wm_concat好 wm_concat函数是可以支持distinct的,但是listagg分析函数是不支持distinct的,只能先去重再聚合 本站文章除注明转载/出处外,均为本站原创
oracle中有一个看似很NB的内置函数wm_concat,可以方便的实现“行转列”功能(相关用法,大家自行搜索一下,能找到很多资料) 今天偶然发现一个问题: 在不同的oracle版本中,wm_concat
♣ 题目部分 ORA-00904: "wm_concat":invalid identifier错误如何解决?...♣ 答案部分 若在创建数据库的时候没有创建WMSYS用户,则在SQL或PL/SQL中有用到WM_CONCAT函数的时候就会报ORA-00904的错误。...其实,WMSYS用户下的WM_CONCAT函数有很重要的用途,比如行转列,但是该函数不稳定。例如,在Oracle 10g上返回的是字符串类型,但是在Oracle 11gR2上返回的是CLOB类型。...为了减轻程序员修改程序的工作量,只有重建函数WM_CONCAT来解决该问题。 若没有创建WMSYS用户的话,则在查询DBA_OBJECTS视图的时候就不能查询到WM_CONCAT的相关信息。...解决办法有两种,一种是采用Oracle本身的脚本来创建WM_CONCAT函数,一种是采用自己创建的函数来解决这个问题。
1.1 问题背景 最近项目Oracle数据库升级由11g升到19C,在验证过程中发现wm_concat函数竟然失效了。...经过网上查询资料发现,wm_concat函数是oracle的非公开函数,在新版的oracle中不支持该函数。 1.2 解决方案 因该函数在代码中使用次数过多,在不改动代码前提下,选择重新创建该函数。...可以修改其密码 alter user wmsys identified by Pro_ut#19; --使用wmsys用户登录数据库 conn wmsys/Pro_ut#19 --在wmsys下创建可用的wm_concat...SCTX2.CURR_STR ; END IF; RETURN ODCICONST.SUCCESS; END; END; / --自定义行变列函数: CREATE OR REPLACE FUNCTION wm_concat.../ grant execute on WM_CONCAT_IMPL to public / grant execute on wm_concat to public / 1.4 方案验证 wm_concat
SQL> create table idtable (id number,name varchar2(30));
()函数和 “ || ” 这个的作用是一样的,是将不同列拼接在一起;那么wm_concat()是将同属于一个组的(group by)同一个字段拼接在一起变成一行。...wm_concat()和concat()具体的区别 oracle中concat()的使用 和 oracle中 “ || ” 的使用 这两个都是拼接字段或者拼接字符串的功能。...wm_concat()这个个函数的介绍,我觉得都介绍的不是很完美,他们都是简单的说 这个是合并列的函数,但是我总结的概括为:把同组的同列字段合并变为一行(会自动以逗号分隔)。.../*简单的合并同一个同学的课程*/ select stuid,wm_concat(coursename) from stu_score group by stuid ?...mysql是一样的用法,把wm_concat 换成 group_concat()就可以啦,具体可以参考这篇文章的使用:浅析MySQL中concat以及group_concat的使用 不知道大家学会这个wm_concat
GROUP_CONCAT为MySQL提供的函数,MaxCompute对应为wm_concat。...wang 2 30 场景一.将a进行合并,不去重 MySQL: select a, group_concat(b) from t group by a; MaxCompute: select a, wm_concat...| 场景二.将a进行合并,去重 MySQL: select a, group_concat(distinct b) from t group by a; MaxCompute: select a, wm_concat...MySQL: select a, group_concat(distinct b order by b desc) from t group by a; MaxCompute: select a, wm_concat...(',', concat_ws(':',b,c)) as b from t group by a; (2). select a, wm_concat(',', concat(b,':',c)) from
t9; ID VAL ---------- -------------------- 3 OFFICE --单独使用时没有任何异常 SQL> select id,wm_concat...(val) new_val from t8 group by id 2 union 3 select id,wm_concat(val) new_val from t9 group by...datatypes: expected - got CLOB --通过修改union为union all或者使用to_char类解决 SQL> select id,wm_concat(val) new_val...from t8 group by id 2 union all 3 select id,wm_concat(val) new_val from t9 group by id;...(val)) new_val from t8 group by id 2 union select id, to_char(wm_concat(val)) new_val from t9 group
通过查询官方文档发现 OceanBase 3.x 版本不支持 XMLAGG 相关函数,故使用 WM_CONCAT 函数进行适配改造。...适配改造 由于 OceanBase 3.x 不支持该函数,故使用 WM_CONCAT 函数进行适配改造。...函数: select WM_CONCAT(a1.name) from (select name from A order by name) a1; --测试结果 obclient [JINGBO]>...4结论 在 OceanBase 3.x 中使用 WM_CONCAT 函数,会触发 remove order by 改写,导致结果顺序不一致,需要加 HINT 对 SQL 进行改造。...OceanBase 4.x 版本已经修复了 WM_CONCAT 函数触发 remove order by改写的问题。 本文关键字:#OceanBase# #Oracle# #函数改造#
ur.user_role))) userrole, 原来SQL: select u.user_sex, u.full_name, u.user_code, to_char(wm_concat...(ur.user_role)) userrole, to_char(wm_concat(r.role_name)) rolename, to_char(r.role_type...u.user_code, to_char(wm_concat...(ur.user_role)) userrole , to_char(wm_concat(r.role_name)) rolename , <otherwise
灵活的支持业务表多种形式的分割,列:“,”、“|”、“&”、“_”... listagg函数: Oracle19C版本后因wm_concat函数效率过低已废弃,可以通过listagg函数来实现行转列的需求...wm_concat函数使用示例: listagg函数使用示例: wm_concat与listagg对比: 1) wm_concat性能略差 2) wm_concat使用后为CLOB字段需要to_char...转换 3) listagg可以自定义排序方式、以及拼接方式 4) listagg性能优于wm_concat 5) 两者都有长度限制
XMLAGG函数语法基本如图,可以用于列转行,列转行函数在oracle里有好几种方法,wm_concat也可以做 这里介绍wm_concat是因为XMLAGG实现效果和wm_concat是一样的,只是性能方面不一样...',').extract('//text()')) .getClobVal() 材料名称 from t_itm_rcv_stuff t groupby t.item; wm_concat
下面再来讲讲wm_concat、listagg、xmlagg。 需求:部门编号为20的所有的员工信息,以行的形式显示。...四、wm_contact语法 SELECT T.DEPTNO, wm_concat(t.ename) names FROM EMP T WHERE T.DEPTNO = '20' GROUP BY...小结: wm_concat 语法最简单,但是默认是 clob列,plsql不容易导出。...listtagg 语法稍微复杂,但是默认是字符串,性能会比wm_concat 好,但是超过4000个字符,受限制。 xmlagg 字符串超过4000字符,就需要使用xmlagg。
REPLACE ('XSHG,XSHE', ',', ''))+1) T left join (select T.KEY,T.VALUE from dict t) D ON D.KEY=T.m_type; 再用wm_concat...函数拼接回返回就可以了 select wm_concat(d.value) from ( SELECT REGEXP_SUBSTR ('XSHG,XSHE', '[^,]+', 1,rownum) AS...GET_FRO_MARKETS(MARKETS VARCHAR2) RETURN VARCHAR2 IS MARKETS_VALUE VARCHAR(50); BEGIN SELECT WM_CONCAT
---------- 3 读取第一个,然后就返回 SQL> --wm_concat... 用" , " 把多个字符串的连接在一起 SQL> select wm_concat(ename) names from emp; SMITH,FORD,MILLER SQL> --lpad
5 WM_CONCAT/LISTAGG 5.1Oracle wm_concat/listagg:实现多行的字符串合并成一个字段。...eg: select wm_concat(x.COLOMN_NAME) fromuser_tab_columns x where x.TABLE_NAME=’CR_USER_INFO’; select...listagg (t.zh_description, ’#’)within group ( order by 1) from t_config t; 5.2 MySQL group_concat:与Oracle的wm_concat
领取专属 10元无门槛券
手把手带您无忧上云