Oracle 10g WM_CONCAT用法及注意点

WM_CONCAT(colName)为Oracle 10g中行数据转列数据的内置函数,执行效果如下

表T

   A    B
------------
   1    2
   1    3
   1    4
   2    1
   2    3

执行语句 :

SELECT A, WM_CONCAT(B) B FROM T GROUP BY A

执行结果:

   A    B
---------------
   1    2,3,4
   2    1,3

注意:

  当在包体内使用行转列时,WM_CONCAT(colName)可以使用,但WM_CONCAT(DISTINCT colName)会在包编译时会报错,

  例如,在某一包的某一存储过程中有如下语句:

 1 UPDATE D_LOWAREA L
 2    SET L.BYQXH = (SELECT /*+index(b)*/
 3                    WM_CONCAT(DISTINCT XH.XHMC)
 4                     FROM OLIVE.OL$_ASSOCIATIONS A,
 5                          PMSBI.F_SB_SBXX_BASIC  B,
 6                          PMSBI.D_XH             XH
 7                    WHERE A.A IN (L.PDBYQ1, L.PDBYQ2, L.PDBYQ3)
 8                      AND A.B = B.SBBH
 9                      AND B.XHDM != ‘wz‘
10                      AND B.XHDM = XH.XHDM);
11 COMMIT;

编译时会报如下错误:

PL/SQL:ORA-30482:DISTINCT option not allowed for this function.

解决方案:

  使用动态SQL(字符串中有单引号由两个单引号表示):

 1    EXECUTE IMMEDIATE
 2    ‘UPDATE D_LOWAREA L
 3       SET L.BYQXH = (SELECT /*+index(b)*/
 4                       WMSYS.WM_CONCAT(DISTINCT XH.XHMC)
 5                        FROM OLIVE.OL$_ASSOCIATIONS A,
 6                             PMSBI.F_SB_SBXX_BASIC  B,
 7                             PMSBI.D_XH             XH
 8                       WHERE A.A IN (L.PDBYQ1, L.PDBYQ2, L.PDBYQ3)
 9                         AND A.B = B.SBBH
10                         AND B.XHDM != ‘‘wz‘‘
11                         AND B.XHDM = XH.XHDM)‘;
12     COMMIT;

PS:Oracle 11g以上版本可以用LISTAGG实现行转列,写法如下:

SELECT A, LISTAGG(B, ‘,‘) WITHIN GROUP(ORDER BY B) B FROM T GROUP BY A
时间: 2024-10-03 22:29:36

Oracle 10g WM_CONCAT用法及注意点的相关文章

RAC 常用维护工具和命令(oracle 10g)

Oracle 的管理可以通过OEM或者命令行接口. Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrcheck,ocrdump,ocrconfig 应用层:srvctl,onsctl,crs_stat 下面分别来介绍这些命令. 一. 节点层 只有一个命令: osnodes, 这个命令用来显示集群点列表,可用的参数如下,这些参数可以混合使用. [[email protected] bin]# ./olsno

oracle 10g rac 修改public ip、vip和private ip

oracle 10g rac 修改public ip.vip和private ip [TOC] 1.IP地址规划 Hostname 当前IP 修改后IP Public IP node1 192.168.56.20 192.168.100.20 Public IP node2 192.168.56.21 192.168.100.21 VIP node1-vip 192.168.56.98 192.168.100.98 VIP node2-vip 192.168.56.99 192.168.100.

Oracle WMSYS.WM_CONCAT(COLUMN)

WMSYS.WM_CONCAT(COLUMN)实现字段合并. eg:SELECT TO_CHAR(WMSYS.WM_CONCAT(DISTINCT E)OVER(PARTITION BY A,B,C,D)) E FROM AA; 将BIN栏位按照A,B,C,D分组合并.合并之后的格式是以逗号分隔(比如:E1,E2,E3). 在最外面使用TO_CHAR()是因为如果不使用TO_CHAR(),那么返回的值是"<CLOB>". 返回<CLOB>,是因为E栏位的数据类型

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

[转]Oracle 10g及pro*c相关问题及解决方法(转)

Oracle 10g及pro*c相关问题及解决方法 2008年08月21日 星期四 上午 11:21 最近一直在进行ORACLE 10g和PRO*C的学习. 其中遇到了不少的问题: 现列于此,已备他用. [注:我的linux版本是RHEL 5,Oracle版本是10g] 1.在ORACLE 10g 安装准备的过程中:缺少libXp.so.6依赖 上网搜过不少文章,但是都不是很好的解决 我自己摸索出一个解决方法: 在RHEL5的安装盘中找到libXp-1.0.0-8.i386.rpm,进行安装后,

在Oracle 10g 中如何以sys的身份登录isqlplus页面

在linux上安装完成Oracle 10g以后,我们常常会用到isqlplus来执行SQL语句.但正常的isqlplus登录界面只支持以普通用户的身份进行登录,而我们有时又必须用到sys身份的权限才能执行某些操作,那如何才能以sys的身份来登录isqlplus页面呢? (1)设置oracle用户的java环境变量:(在文件的最底下增加一行) [[email protected]~] vim.bash_profile exportJAVA_HOME=$ORACLE_HOME/jdk exportP

AIX 5.3 Install Oracle 10g RAC 错误集锦--9i RAC present

AIX 5.3 Install Oracle 10g RAC 错误集锦--9i RAC Present 系统环境: 操作系统: AIX 5300-08 集群软件: CRS 10.2.0.1 数据库:   Oracle 10.2.0.1                     系统架构图 故障现象: 解决方法: [[email protected] tmp]# cat /etc/oratab # This file is used by ORACLE utilities.  It is creat

RedHat EL5 安装Oracle 10g RAC之--系统环境配置(1)

RedHat EL5 安装Oracle 10g RAC之--系统环境配置(1) 系统环境: 操作系统:RedHat EL5 Cluster: Oracle CRS 10.2.0.1.0 Oracle:  Oracle 10.2.0.1.0 如图所示:RAC 系统架构 一.操作系统环境 1.网络配置(在所有节点) [[email protected] ~]# cat /etc/hosts # Do not remove the following line, or various programs

Oracle 10g安装64位图解流程

1. 安装准备阶段 1.1 安装Oracle环境 本例使用X-Manager来实现与Linux系统的连接,本例使用的所有命令和操作都是在X-Manager下进行.X-Manager安装完成后的配置方法如下: 1. 打开X-Manager的X-Shell 2. 点击New,新建一个连接地址,设置完成后,点击OK 3. 使用用户名,密码进行登录,登录完成后,进入如下图所示画面即成功连接到Linux系统 4. 4 4. 将下载的Oracle数据库的安装包10201_database_linux_x86