Oracle函数wmsys.wm_concat的使用

首先介绍语法:

wmsys.wm_concat

Definition:

The Oracle PL/SQL WM_CONCAT function is used to aggregate data from a number of rows into a single row, giving a list of data associated with a specific value. In effect, it cross-tabulates a comma delimited list.

www.2cto.com

Note that WM_CONCAT is undocumented and unsupported by Oracle, meaning it should not be used in production systems. The LISTAGG function, which can produce the same output asWM_CONCAT is both documented and supported by Oracle.

例子:

[sql]

select t1.main_id,

to_char(wmsys.wm_concat(t1.send_id || '||' || t2.realname || '||' ||

t2.IMG_PATH)) sendidlist

from LCMS_SEND_USER t1, LCMS_USER_STUD t2

group by t1.main_id;

结果:

Oracle函数wmsys.wm_concat的使用

网络中也有这样使用:

下面只是收藏:

[sql]

SQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable;

www.2cto.com

ID NAME

---------- --------------------------------------------------------------------------------

10 ab,bc,cd

10 ab,bc,cd

10 ab,bc,cd

20 ab,bc,cd,hi,ij,mn

20 ab,bc,cd,hi,ij,mn

20 ab,bc,cd,hi,ij,mn

6 rows selected

[sql]

SQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;

ID NAME

---------- --------------------------------------------------------------------------------

10 ab

10 ab,bc

10 ab,bc,cd

20 ab,bc,cd,hi

20 ab,bc,cd,hi,ij

20 ab,bc,cd,hi,ij,mn

www.2cto.com

6 rows selected

个人觉得这个用法比较有趣.

SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable;

ID NAME

---------- --------------------------------------------------------------------------------

10 ab,bc,cd

10 ab,bc,cd

10 ab,bc,cd

20 hi,ij,mn

20 hi,ij,mn

20 hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable;

www.2cto.com

ID NAME

---------- --------------------------------------------------------------------------------

10 ab

10 bc

10 cd

20 hi

20 ij

20 mn

6 rows selected

作者 psyuhen

分类:默认分类 时间:2012-01-09 人气:7
本文关键词:
分享到:

相关文章

  • ORACLE列值合??/h1> 2012-02-12

    合?懔兄底钔ㄓ玫姆椒ň褪??一??自定?函?等???,??介?的是其他方法。 在SQL Server中合?懔兄悼梢允褂?or Xml Path,在Oracle中?t可以使用wm_concat 或 ListAgg。 ??????/p> 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE MyTest(xType NUMBER,City nvarchar2(200)); / INSERT INTO MyTest(xType,City) SELECT 1,N'北京'

  • Oracle合并多行记录为一行实例分析 2013-12-02

    1、实际需求情况如下: 描述:上述表中,某一位同学有多门课程和成绩,现在希望有一条SQL语句,将课程名称和成绩合并在一起显示,如下: www.2cto.com 描述:将这位同学的全部课程和成绩用一个字段表示,里面包括全部的课程名称和考试成绩 2、问题分析 解决这个问题可以采用创建function的办法,去合并这2个字段,但这样太麻烦,由于是采用的Oracle10g,故可以采用函数wmsys.wm_concat()实现此功能。 3、解决方案 SQL: 第一步先写一个视图view_ly_sjdxpt

  • Oracle中wm_concat函数报错解决方法 2012-11-20

    Oracle中wm_concat函数报错解决方法 原SQL语句 select t.mail_no,wm_concat(t.notice_no) as notice_no_all from ardba.arbino t group by t.mail_no 错误信息 解决SQL select a.mail_no,wm_concat(a.notice_no) || max(a.str) as notice_no_all from (select k.mail_no,k.notice_no, case

  • 网御星云第二集某重要业务系统爆出SQL注入Oracle数据库订单信息 2012-08-13

    网御星云--一个不安全的安全厂商 网御星云的电子订单管理系统,可以爆sql注入。ORACLE数据库成功列出,随便找了个用户,破了md5加密,进入订单系统,所有订单一览无余。想问问你们,这个真的不重要吗,安全厂商…………………… 给你看注入点: http://agent.leadsec.com.cn/agent/countryProvinceChange.htm?currTime=Tue%20Jul%2001%202014%2009:15:09%20GMT+0800 POST参数:province

  • oracle修改用户登录密码 2013-07-11

      1、使用oracle用户登录,连接数据库   [[email protected] ~]$ sqlplus /nolog   SQL*Plus: Release 10.2.0.1.0 - Production on Thu Feb 26 12:06:29 2009   Copyright (c) 1982, 2005, Oracle. All rights reserved.   SQL> conn /as sysdba   Connected.   //查看用户   SQL> select

  • Oracle数据库10gR2中stream多源复制方法 2014-07-28

    在10gR2中,oracle简化了stream的配置的全过程,在9iR2及10gR1中,需要针对stream的捕获、传播、应用进程进行配置的步骤 已经被dbms_streams_adm新提供的过程(pre_instantiation_setup/post_instantiation_setup)给封装起来啦, 配置stream只需要调用两个存储过程就可以搞定啦,真是太激动人心啦,下面简单地介绍一下dbms_streams_adm的新过程的用法。 1.在stream进行配置前,需要做些准备工作 a

  • oracle VM manager 3.1试验备忘录 2012-01-01

    1、下载oralce vm组件,需要外国的邮件地址。比如7mt.org,国内的不行,翻墙也不行。 2、如果用nfs做共享存储,一定要给足权限。 3、安装时,建议使用production(产品级安装)。如果选用“Demo”,会自动安装 oracle xe 11;而选择“Production”安装,则需要单独安装oracle数据库(标准版或者企业版)。 www.2cto.com 4、用浏览器登录管理 oracle vm manager时,在控制服务器上找不到相关报错信息, 这个折腾我好一阵子。请留意

  • Oracle中如何把表和索引放在不同的表空间里 2012-01-02

    Oracle中并没有区分表空间里放的是表还是索引,所有当数据量比较小时,完全可以把表和索引放在同一个表空间里,但随着数据量的增大,最好还是把表和索引分开存储在不同的表空间里 因为: 1)提高性能:尽量把表和索引的表空间存储在不同在磁盘上,把两类不同IO性质的数据分开放,这样可以提高磁盘的IO总体性能; 2)便于管理:试想一下,如果索引的数据文件损坏,只要创建索引即可,不会引起数据丢失的问题。 下面语句用于移动索引的表空间: 复制代码 代码如下: alter index INDEX_OWNER.I

  • Oracle数据库日常维护手册 2012-01-02

      在Oracle数据库运行期间,DBA应该对数据库的运行日志及表空间的使用情况进行监控,及早发现数据库中存在的问题。   一、Oracle警告日志文件监控   Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:   ●数据库的启动、关闭,启动时的非缺省参数;   ●数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;   ●对数据库进行的某些操作,如创建或删除

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.145 (s). 10 q(s)