oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起

 更新时间:2013年01月15日 15:17:32   作者:  
由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况;又不想滚动;接下来介绍使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接,感兴趣的朋友可以了解下
需求
目前接触BI系统,由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况,但是又不想滚动,想一眼就可以看到所有的,于是就想到了字符串拼接的形式。

解决方案:使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接。
函数限制:它的输出不能超过4000个字节。

为了不让SQL出错,又可以满足业务的需求,超过4000个字节的部分,使用“。。。”
实现SQL如下
复制代码 代码如下:

CREATE TABLE TMP_PRODUCT
(PRODUCT_TYPE VARCHAR2(255),
PRODUCT_NAME VARCHAR2(255));

insert into tmp_product
select 'A','ProductA'||rownum from dual
connect by level < 100
union all
select 'B','ProductB'||rownum from dual
connect by level < 300
union all
select 'C','ProductC'||rownum from dual
connect by level < 400
union all
select 'D','ProductD'||rownum from dual
connect by level < 500
union all
select 'E','ProductE'||rownum from dual
connect by level < 600;
复制代码 代码如下:

SELECT PRODUCT_TYPE,
WM_CONCAT(PRODUCT_NAME) || MAX(STR) AS PRODUCT_MULTI_NAME
FROM (SELECT PRODUCT_TYPE,
PRODUCT_NAME,
CASE
WHEN ALL_SUM > 4000 THEN
'...'
ELSE
NULL
END AS STR
FROM (SELECT PRODUCT_TYPE,
PRODUCT_NAME,
SUM(VSIZE(PRODUCT_NAME || ',')) OVER(PARTITION BY PRODUCT_TYPE) AS ALL_SUM,
SUM(VSIZE(PRODUCT_NAME || ',')) OVER(PARTITION BY PRODUCT_TYPE ORDER BY PRODUCT_NAME) AS UP_SUM
FROM TMP_PRODUCT)
WHERE (UP_SUM <= 3998 AND ALL_SUM > 4000)
OR ALL_SUM <= 4001)
GROUP BY PRODUCT_TYPE

相关文章

  • Oracle表中重复数据去重的方法实例详解

    Oracle表中重复数据去重的方法实例详解

    这篇文章主要介绍了Oracle表中重复数据去重的方法实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • Oracle故障处理之ORA-00600错误处理思路分析

    Oracle故障处理之ORA-00600错误处理思路分析

    最近在做一个项目,使用的是Oracle数据库,近两天不知道怎么回事,告警日志里总是显示这个错误,下面这篇文章主要给大家介绍了关于Oracle故障处理之ORA-00600错误处理思路的相关资料,需要的朋友可以参考下
    2024-05-05
  • 如何使用log miner分析oracle日志

    如何使用log miner分析oracle日志

    日常生活中,我们经常因为操作失误丢失数据或者是更改数据,如何进行恢复呐?这篇文章就是帮助我们解决这一困扰,需要的朋友可以参考下
    2015-07-07
  • Oracle rac环境的数据库导入操作步骤

    Oracle rac环境的数据库导入操作步骤

    Oracle RAC是一种基于共享存储和共享数据库的集群解决方案,可以将多个 Oracle 数据库实例连接成一个逻辑上的单一数据库,提供高可用性、灵活性和可伸缩性,本文给大家介绍Oracle rac环境的数据库导入操作,感兴趣的朋友一起看看吧
    2023-06-06
  • oracle执行cmd的实现方法

    oracle执行cmd的实现方法

    装了一个oracle db11g,于是想试一下网上流传的在sqlplus中执行cmd的一些命令,也不知怎么的,没一个好用的,可能是网上转来转去的转错了.
    2009-04-04
  • oracle数据库常用的99条查询语句

    oracle数据库常用的99条查询语句

    这篇文章主要分享了oracle数据库常用的99条查询语句,学习oracle的朋友可以参考下
    2013-08-08
  • Oracle 11g下编译使用BBED的方法教程

    Oracle 11g下编译使用BBED的方法教程

    这篇文章主要给大家介绍了在Oracle 11g下编译使用BBED的方法教程,文中详细介绍了关于拷贝缺失文件、编译BBED以及BBED使用测试的相关资料,通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Oracle数据库表名支持的最大长度是多少

    Oracle数据库表名支持的最大长度是多少

    这篇文章主要介绍了Oracle数据库表名支持的最大长度,本文通过Oracle标识符确认了表名的最大支持字符串为30个字符,需要的朋友可以参考下
    2014-08-08
  • Oracle学习笔记(六)

    Oracle学习笔记(六)

    最近需要用的oracle,所以大家好好的学习下基础并整理下资料,希望能帮助到需要的朋友。
    2011-12-12
  • 解决oracle用户连接失败的解决方法

    解决oracle用户连接失败的解决方法

    oracle用户连接失败的问题着实让我们头疼,下面就为您介绍oracle用户连接失败的解决方法,希望对您学习oracle用户连接方面能有所帮助。
    2010-12-12

最新评论