oracle listagg方法,Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg...

Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg

字符串拼接(String Aggregation Techniques)是数据处理时经常需要用到一个技术,比如需要按时间顺序拼装一个快递的运输记录,或者将流程中各个环节的处理人拼装为一个字符串。

Oracle中有多种方法来实现这个功能,这里罗列几种,详细用法可以参考下面的文章:

WM_CONCAT函数

LISTAGG函数

自定义聚合函数

本文介绍第二种:LISTAGG函数,这是Oracle11gR2开始正式推出的字符串聚合函数,功能非常强大。

0.测试样例及基本用法

从all_objects视图中取4个表记录和3个视图记录作为测试数据:

SQL> CREATE TABLE T_STRAGG AS

2 select OBJECT_TYPE,CREATED,OBJECT_NAME from ALL_OBJECTS WHERE OBJECT_TYPE='TABLE' AND rownum<5

3 UNION ALL

4 select OBJECT_TYPE,CREATED,OBJECT_NAME from ALL_OBJECTS WHERE OBJECT_TYPE='VIEW' AND rownum<4;

Table created

SQL> select OBJECT_TYPE,TO_CHAR(CREATED,'YYYY-MM-DD HH24:MI:SS') CREATED,OBJECT_NAME from T_STRAGG;

OBJECT_TYPE CREATED OBJECT_NAME

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

TABLE 2013-10-09 18:23:43 DUAL

TABLE 2013-10-09 18:23:44 SYSTEM_PRIVILEGE_MAP

TABLE 2013-10-09 18:23:45 TABLE_PRIVILEGE_MAP

TABLE 2013-10-09 18:23:47 STMT_AUDIT_OPTION_MAP

VIEW 2013-10-09 18:23:53 ALL_XML_SCHEMAS

VIEW 2013-10-09 18:23:56 ALL_XML_SCHEMAS2

VIEW 2013-10-09 18:23:54 V_$ADVISOR_CURRENT_SQLPLAN

现在想要根据OBJECT_TYPE分组,将OBJECT_NAME按时间顺序拼装成类似物流信息的字符串:

2013-10-09 18:23:43@DUAL

2013-10-09 18:23:44@SYSTEM_PRIVILEGE_MAP

2013-10-09 18:23:45@TABLE_PRIVILEGE_MAP

实现方法很简单:

SQL> select object_type

2 ,LISTAGG(TO_CHAR(CREATED,'YYYY-MM-DD HH24:MI:SS')||'@'||OBJECT_NAME,CHR(10)) WITHIN GROUP(ORDER BY CREATED) AS TXT

3 FROM T_STRAGG

4 GROUP BY object_type;

OBJECT_TYPE TXT

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

TABLE 2013-10-09 18:23:43@DUAL

2013-10-09 18:23:44@SYSTEM_PRIVILEGE_MAP

2013-10-09 18:23:45@TABLE_PRIVILEGE_MAP

2013-10-09 18:23:47@STMT_AUDIT_OPTION_MAP

VIEW 2013-10-09 18:23:53@ALL_XML_SCHEMAS

2013-10-09 18:23:54@V_$ADVISOR_CURRENT_SQLPLAN

2013-10-09 18:23:56@ALL_XML_SCHEMAS2

跟WM_CONCAT相比,LISTAGG有如下特征(优缺点):

1.返回值的分隔符可以自定义

这一点大大方便了开发人员,只要有需要可以摆出各种姿势^_^

2.返回值类型是VARCHAR2

跟WM_CONCAT相反,速度是快了,但如果数据量大就报错

ORA-01489: result of string concatenation is too long

(字符串连接的结果过长)

SQL> INSERT INTO T_STRAGG select object_type,CREATED,OBJECT_NAME FROM ALL_OBJECTS where rownum<1000;

999 rows inserted

SQL> select object_type

2 ,LISTAGG(TO_CHAR(CREATED,'YYYY-MM-DD HH24:MI:SS')||'@'||OBJECT_NAME,CHR(10)) WITHIN GROUP(ORDER BY CREATED) AS TXT

3 FROM T_STRAGG

4 GROUP BY object_type;

ORA-01489: result of string concatenation is too long

没办法,用回WM_CONCAT?

还是建议用第三个方法:自定义聚合函数

3.不支持DISTINCT

直接报错ORA-30482: DISTINCT option not allowed for this function

(DISTINCT 选项在此函数中禁用)

SQL> select object_type,LISTAGG(DISTINCT OBJECT_NAME) WITHIN GROUP(ORDER BY CREATED) AS TXT

2 FROM T_STRAGG

3 GROUP BY object_type;

ORA-30482: DISTINCT option not allowed for this function

解决方法:

1.先distinct,结果再listagg

2.自定义聚合函数来取代listagg函数

结论

listagg能满足的情况下,用listagg,不要用wm_concat listagg无法满足的情况下,还是网上拿一个自定义聚合函数好了

http://www.dengb.com/oracle/1315268.htmlwww.dengb.comtruehttp://www.dengb.com/oracle/1315268.htmlTechArticleOracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg 字符串拼接(String Aggregation Techniques)是数据处理时经常需要用到一个技...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他俩都曾是技术大牛,创业这些年来有怎样的苦与乐?

这是头哥侃码的第263篇原创国庆假期回来&#xff0c;「头哥唠 B 唠」的直播仍在继续。这次我邀请了我工作上的老板和朋友&#xff0c;一起聊了聊关于 “技术创业路上的苦与乐”。熟悉他们两位的都知道&#xff0c;可以说是技术出身&#xff0c;然后创业当老板的代表。大家都知道…

maven,gradle本地缓存位置

gradle: 配置系统环境变量GRADLE_USER_HOME即可&#xff0c;值为缓存位置。 maven: 修改settings文件&#xff1a;maven的home路径下的conf文件夹下的settings.xml 对于有些IDEA&#xff0c;还需要配置。但是不要再打开项目后的FILE-->settings配置&#xff0c;而是需要在选…

git和php的区别,Git与Github的有什么区别

Git是一款免费&#xff0c;开源的分布是版本&#xff0c;用于敏捷高效的处理任何或小或大的项目。分布式相对于集中式的最大区别在于开发者可以提到本地&#xff0c;每个开发者通过克隆&#xff0c;在本地磁盘内拷贝一个完整的GIt仓库。Git的功能特性&#xff1a;1.从服务器上克…

E20171214-sl

well-grounded  地基打的好 relevent adj. 有关的&#xff0c;中肯的; 相关联的proposal n. 建议; 提议; 求婚; 〈美〉投标;转载于:https://www.cnblogs.com/lancgg/p/8281675.html

客户端嵌套 Web 页面如何选择

客户端嵌套 Web 页面如何选择客户端嵌套 Web 页面如何选择作者&#xff1a;驚鏵在使用客户端嵌套WEB页面有一下几种方案&#xff1a;WebView2[1]Electron[2]NW.js[3]sciter[4]miniblink[5]现在国内众多桌面程序都是用了以下五种&#xff0c;因为它跨平台更为方便&#x1f447;。…

每天练习50个shell

1、统计日志每天IP访问量前十 awk {print $1} 1.log | sort -n | uniq -c | sort -n 解释&#xff1a;&#xff08;1&#xff09;awk 命令在分段方面比较有优势&#xff0c;这里的{print $1}将第一段打印出来&#xff0c;awk可以用-F指定分隔符&#xff0c;如果不指定分隔符&am…

【Tomcat】Tomcat配置与优化(内存、并发、管理)【自己配置】

一、JVM内存配置优化 主要通过以下的几个jvm参数来设置堆内存的&#xff1a; -Xmx512m 最大总堆内存&#xff0c;一般设置为物理内存的1/4 -Xms512m 初始总堆内存&#xff0c;一般将它设置的和最大堆内存一样大&#xff0c;这样就不需要根据当前堆使用情况而调整堆的大…

oracle 网关下载,oracle透明网关访问sqlserver2000

oracle透明网关访问sqlserver2000介绍oracle 10g透明网关访问sqlserver2000一、环境如下:ORACLE 10g 安装在:192.168.0.250 的window2003 server(版本&#xff1a;Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production) SqlServer 2000安装在:192.16…

C++和C#的指针小解

昨天和赵崇说了一下工作的事情&#xff0c;说起了性能问题就讨论起了数据结果和指针对性能的影响。曾经一直没有想到这方面的事情&#xff0c;这几天专门抽时间回想一下这方面的知识&#xff0c;然后一点一点的总结一下&#xff0c;看看数据结构和指针在咱们代码中是怎样实现效…

使用RoleBasedAuthorization实现基于用户角色的访问权限控制

本文将介绍如何通过 Sang.AspNetCore.RoleBasedAuthorization[1] 库实现 RBAC 权限管理。使用介绍Step 1添加库 Sang.AspNetCore.RoleBasedAuthorizationInstall-Package Sang.AspNetCore.RoleBasedAuthorizationStep 2在 Program.cs 中添加builder.Services.AddSangRoleBasedA…

【2018-11-15】中证1000指数的估值详情

中证1000指数选取中证500和沪深300指数样本股以外的&#xff0c;流动性好的1000只股票组成&#xff0c;与沪深300 和中证500 等形成互补。 中证1000的个股大多数是由市场上流通市值排名在 800 到 1800 名之间的个股组成&#xff0c;是一个适用范围较广的小盘指数。 中证1000的…

[Leetcode Week15]Populating Next Right Pointers in Each Node

Populating Next Right Pointers in Each Node 题解 原创文章&#xff0c;拒绝转载 题目来源&#xff1a;https://leetcode.com/problems/populating-next-right-pointers-in-each-node/description/ Description Given a binary tree struct TreeLinkNode {TreeLinkNode *left…

php 数组 1 开始,php数组使用1

1、array_values($arr) 将数组转换成索引数组$arr1 [id>10,name>杨过,sex>male,salary>8900];echo .var_export(array_values($arr1),true).;2、array_column($arr,$col,$boll); 获取多维数组的列表组成的数组。$arr2 [];$arr2 [[id>10,name>杨过,sex>…

印度光伏巨头Adani与华为签署500MW采购合同

日前&#xff0c;印度光伏巨头Adani与华为签订了采购合同。Adani未来一年的项目全部采用华为FusionSolar3.0智能光伏解决方案&#xff0c;首期500MW采购合同已经签署&#xff0c;将采购最新的智能光伏控制器&#xff08;组串逆变器&#xff09;SUN2000-43KTL、数据采集器SmartL…

宣布 .NET MAUI 支持 .NET 7 RC 2

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;6分钟)支持 .NET 7 Release Candidate 2 的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此…

linux c文件操作,Linux C 文件的输入/输出操作

10.1 文件I/O操作概述在Linux系统中&#xff0c;文件I/O操作可以分为两类&#xff0c;一类是基于文件描述符的I/O操作&#xff0c;另一类是基于数据流的I/O操作。10.1.1 文件描述符简介在文件操作一章中&#xff0c;也经常提到文件描述符这个概念。所谓文件描述符&#xff0c;就…

个人中心标签页导航

新页面userbase.html,用<ul ><li role"presentation"> 实现标签页导航。<ul class"nav nav-tabs"> <li role"presentation"><a href"#">Home</a></li> <li role"presentation&qu…

智慧城市免费WiFi覆盖怎么实施?武邑开启智慧生活模式

“真没想到武邑这个国家级贫困县也能够随地使用无线网络&#xff0c;我初次考察就喜欢上了这里。”准备前来武邑县投资的客商王先生说。日前&#xff0c;随着县城广场、商场等公共场所的免费WiFi覆盖&#xff0c;及移动电子商务借势O2O的快速发展&#xff0c;衡水市武邑县正在逐…

Uno开发的小游戏

大家好&#xff0c;我是沙漠尽头的狼。刚在微信群里逛&#xff0c;有网友发了Uno的在线小游戏&#xff0c;站长觉得不错&#xff0c;简单分享下&#xff1a;群聊涨见识Uno是什么&#xff1f;使用 C# 和 WinUI 实现像素完美的多平台应用程序&#xff0c;用于构建适用于 Windows、…

sqlplus命令行登录oracle数据库的N种方法盘点

欢迎访问我的个人博客IT废柴&#xff0c;本文永久链接移至&#xff1a;sqlplus命令行登录oracle数据库的N种方法盘点 sqlplus有几种登陆方式Oracle数据库&#xff0c; 比如&#xff1a; 1.以操作系统权限认证的oracle sys管理员登陆 C: > sqlplus "/as sysdba" 2…