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.pswp.cn/news/281633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281633.shtml
英文地址,請注明出處:http://en.pswp.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…