Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB 一.问题出现 项目中的某个查询需要将表中某个字段不重复地拼接起来,百度得到该函数WMSYS.WM_CONCAT(字段),以及listagg(字段,连接符)函数,前者只能使用逗号','连接,后者可以定制连接符. 但由于listagg不能直接在参数中使用distinct去重,因此采用WM_CONCAT函数. SQL格式如下: select t.id, t.pjname from (select A.id as id,…
背景        还是那个问题,部分程序员喜欢用sql解决问题.发现了这个函数,当初真是大喜过望,现在是哭笑不得.10g支持这个函数,11好像不支持了,而且只有oracle支持,其实自己写个通用方法,既为数据库通用有保证,又为后期维护提供便利. 不建议用这个函数.但是视图活存储过程.临时统计之类的还好可以用用. wmsys.wm_concat…
将多行数据拼接成一行: --wmsys.wm_concat group by a.flowid; 但有大小限制:字符串缓冲区太小,超过varchar 4000长度.扩展:更改返回类型为clob --Type CREATE OR REPLACE TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR clob, STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_i…
Sql代码 select t.rank, t.Name from t_menu_item t; 10 CLARK    10 KING    10 MILLER    20 ADAMS    20 FORD    20 JONES    20 SCOTT    20 SMITH    30 ALLEN    30 BLAKE    30 JAMES    30 MARTIN    30 TURNER    30 WARD -------------------------------- 我们通过…
行转列: SELECT *   FROM   src_table   UNPIVOT (param_value FOR param_name IN (product_color AS 'product_color', product_type AS 'product_type', is_intelligent AS 'is_intelligent')); 列转换: select *  from ( select flow,xx from tab )   a pivot (max(value) f…
Mysql的查询结果行字段拼接,能够用以下两个函数实现: 1. concat函数 mysql> select concat('1','2','3') from test ; +---------------------+ | concat('1','2','3') | +---------------------+ | 123 | +---------------------+ 假设连接串中存在NULL,则返回结果为NULL: mysql> select concat('1','2',NULL…
语法: COUNT(DISTINCT expr ,[expr ...]) 函数使用说明:返回不同的非NULL 值数目.若找不到匹配的项,则COUNT(DISTINCT) 返回 0 Mysql的查询结果行字段拼接,可以用下面两个函数实现: 1. concat函数 mysql') from test ; +---------------------+ ') | +---------------------+ | +---------------------+ 如果连接串中存在NULL,则返回结果为N…
Mysql的查询结果行字段拼接,可以用下面两个函数实现: 1. concat函数 mysql') from test ; +---------------------+ ') | +---------------------+ | +---------------------+ 如果连接串中存在NULL,则返回结果为NULL: mysql') from test ; +--------------------------+ ') | +--------------------------+ |…
在11G以下版本中oracle有自带的函数wm_concat可以实现,如: select wm_concat(id) from table where col='1' 但是在12C版本中此函数无法使用,但可以使用另一种方式实现,如: select xmlagg(xmlparse(content upper(id)||',' wellformed) order by id).getclobval() from table where col='1' 该函数返回结果为一个Blob类型的大字段,且因为…
原帖:http://www.cnblogs.com/nayitian/p/3231734.html 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 COMMENT_BODY. In ef…
合并列函数 WMSYS.WM_CONCAT(distinct(字段名)) 函数 可以实现字符串拼接在一起,这种情况可以在要求把一个字段的多个值拼接在一起的时候使用.其中distinct可以去掉重复的值,如果需要重复的值,可以直接去掉.…
备忘:这个函数最大是4000,根据拼接列的长度,通过限制拼接条数来防止拼接字符串过长错误 --这个情况是从子表中读取出具,这里直接把它当做查询字段处理,在子表中有所有数据 select info.id, (select wmsys.wm_concat(replace(st1.illegal, ',', ',')) from ts_acc_standards st1 group by st1.acc_id) as illegal_names form ts_info info where info…
1.通过 10g 所提供的 WMSYS.WM_CONCAT 函数即可以完成 行转列的效果 select group_code, wm_concat(display_title) from DR_OPM_DATASET_RELATED group by group_code 网上看到例子: CREATE TABLE tab_name(ID INTEGER NOT NULL PRIMARY KEY,cName VARCHAR2(20));CREATE TABLE tab_name2(ID INTEG…
这个是因为字符集的问题,和空值是没关系的.其实已经取到了数据,可以验证一下返回的不是0,但是由于这个里面有个chr(0)字符,而且可能第一个字符就是chr(0),所以就显示得怪异的空现象.至于为何会出现chr(0),这就是因为WM_CONCAT函数的问题了,可能它对于多种字符集的处理不是很好吧,所以如果里面的参数不用to_char处理一下,就有可能出现乱码甚至为空的现象. 像这样: wmsys.wm_concat(to_char(tab.SYSTEM_SYMBOL)) AS SYSTEM_SYM…
例.select TO_CHAR(WMSYS.WM_CONCAT(ID)) from patrol_data_content  where patrol_unit_id = '1628D189543B441C998EA1F396E611BD'…
一.LISTAGG() 简介 介绍:其函数在Oracle 11g 版本中推出,对分组后的数据按照一定的排序进行字符串连接. 其中,“[,]”表示字符串连接的分隔符,如果选择使用[over (partition by )]则会使其变成分析函数: 用法1: SELECT aaa, listagg(bbb,',') within GROUP (ORDER BY aaa) FROM table  GROUP BY aaa 用法2: SELECT aaa, listagg(bbb,',') within…
1.group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来.要返回哪些列,由函数参数(就是字段名)决定.分组必须有个标准,就是根据group by指定的列进行分组. group_concat函数应该是在内部执行了group by语句,这是我的猜测. 1.测试语句: select group_concat(town) from p…
用到Oralce10g以后增加的函数wmsys.wm_concat 例如这张表的有两个字段,要按airport_id合并成两行可用sql语句 select airport_id,   wmsys.wm_concat( account) from AIRPORT_MODIFY group by airport_id 结果为: 非常简单,美中不足的是合并结果没有排序,解决排序问题最简单的办法就是在合并列前加上distinct 此外,如果合并列结果出现乱码,需要在合并列前加上to_char(),如wm…
本文转自:http://www.cnblogs.com/ycdx2001/p/3502495.html with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select…
1.oracle函数 WMSYS.WM_CONCAT的使用 如图,将图1的结果变成图2的结果,使用函数 WMSYS.WM_CONCAT 即可. 查询语句需要配合使用group by select aa,wmsys.wm_concat(t1.name) from ( select t.name,to_char(t.createdate,'yyyy-mm-dd') aa from td_user t where t.td_conference_id = 3218 and t.status = 1 a…
昨天在测试的时候发现,开发人员写的一段程序放在开发库中是好的,但是放在测试库中就会有问题.开发人员一直找不到问题的原因在哪里.于是就花了点时间协助开发人员来找问题的根本原因. 通过一些技术手段,定位到问题是由一个SQL语句引起的. SQL语句如下: WITH PXQ_TASK_TEMP AS (SELECT A.DISTRIBUTE_DATE,          A.APP_NO,          A.TASK_ID,          A.TASK_NO,          A.ACTUAL…
wmsys.wm_concat是一个聚合函数,其作用是将一列数据转换成一行,也就是我们常用的行专列,但是该函数是一个undocument函数,所以不推荐大家使用这个函数.因为在后续的版本中还提不提供这个函数都不好说呢. 首先创建临时表和测试数据 使用该函数,可以看到我们的按id做group by,把name字段列转置为一行 但是我们使用wmconcat还是会遇到这么两个问题:1.vm_concat函数是无序的.2.遇到ora-22922的错误. 通过我们第二步可以看到name字段在列转行后没有按…
select t.rank, t.Name from t_menu_item t; 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 20 SCOTT 20 SMITH 30 ALLEN 30 BLAKE 30 JAMES 30 MARTIN 30 TURNER 30 WARD -------------------------------- 我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数即可以完成 行转列的效果 sele…
---计算九月每个电厂的数量select f_dcname,count(f_dcname) as 九月份的数量 from W_EC_PLACESTATION_COLLECT twhere f_collectdate >= TRUNC(TO_DATE('2018-09-01','yyyy-MM-dd'),'month') AND f_collectdate < TO_DATE('2018-09-30','yyyy-MM-dd')+1group by f_dcname ----计算九月份每个电厂对…
在Oracle 10g下,推断依赖性仅仅达到了对象级.也就是说存储过程訪问的对象一旦发生了变化.那么Oracle就会将存储过程置为INVALID状态.所以在为表做了DDL操作后.须要把存储过程又一次进行编译. 在Oracle 11g下,对依赖的推断更加细化,推断到了字段级.尽管有这么好的特性.但我还是建议对表做了DDL操作后,把存储过程再又一次编译一下. Oracle 10g下: SQL> select * from v$version; BANNER ---------------------…
Oracle查询所有字段,再加两个字段拼接, select a.*,(SNO||SNAME) from TEST_STUDENT a; 同理,查询所有字段,其中两个字段求和:(SNO和SAGE都是NUMBER数据类型) select a.*,(SNO+SAGE) from TEST_STUDENT a; select * from table; 要加其他查询内容,必须在*前面加表名或简称. 如下这种也可以: select TEST_STUDENT.*,(SNO+SAGE) from TEST_S…
写在前面 按照读者朋友的要求写了一篇<[Oracle]CentOS7/CentOS8命令行安装Oracle 11G R2>,由于读者完全是按照我的安装方式安装的Oracle数据库,也是将Oracle数据库安装在了CentOS 8虚拟机中,安装成功后,便关闭了虚拟机,等重新开启虚拟机时,Oracle数据库并没有自动启动,此时,需要我们重新启动Oracle数据库. 重启Oracle数据库 重启Oracle数据库包括启动Oracle数据库服务进程和启动Oracle数据库两步,大家继续往下看. 按照&…
CentOS 6 静默安装oracle 11g 我参考的这个,他非常详细:https://blog.csdn.net/JIANG123456T/article/details/77745892 我只是对自己的安装做一个记录. oracle下载地址(下载需要账号,可以去网上搜oracle账号就可以搜到或者自己注册):https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft…
with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nation ,'New York' city from dual union all se…
实验环境:Oracle 11g R2 RAC (11.2.0.3.5)                Oracle Enterprise Linux 5.6 x86 1.创建 ASM 磁盘组 在两节点挂好磁盘后,在第一节点上对磁盘进行分区 [root@rac1 ~]# fdisk -l Disk /dev/sde: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 cylinders Units = cylinders of 1…