oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序
oracle中,wm_concat函數是一個聚合函數,和mysql中的group_concat函數類似,不過group_concat函數比較強大,可以定義分隔符和排序,當然所謂強大是相對的,這里假使我們不知道oracle中的over函數,也不知道listagg函數. 我們先來看看wm_concat函數能實現什么功能,通俗點==>列傳行,如果不明白,請看下面截圖(可以看到分隔符默認為','順序也是雜亂的) ? ? ? ?? 所以,接下來,我們開始重寫wm_concat函數(需要注意和需要說明的地方…
Oracle中wm_concat()函數的使用 wm_concat()函數是oracle行列轉換函數,該函數可以把列值以‘,’分割開來,并顯示成一行. 1.原數據: 2.把結果分組以‘|’分隔,以一行打印出來 3.over(partition by )的用法 4.over(order by )的用法…
Oracle創建WM_CONCAT函數 WM_CONCAT這個函數會出錯,所以從 11g開始.官方不認可 WM_CONCAT.然后就沒這個函數了, 下面就是創建WM_CONCAT這個函數的步驟 第一步: 下載三個文件:owmctab.plb . owmaggrs.plb . owmaggrb.plb 第二步: 用sqlplus登錄:CONN SYS/PASS_WORD AS SYSDBA; 一.忘記除SYS.SYSTEM用戶之外的用戶的登錄密碼. 用SYS (或SYSTEM)用戶登錄: CONN…
wm_concat函數簡單說就是行轉列顯示. 轉自:http://christy-fang.iteye.com/blog/1299850 首先讓我們來看看這個神奇的函數wm_concat(列名),該函數可以把列值以","號分隔起來,并顯示成一行,接下來上例子. 準備測試數據 SQL> create?table?test(id number,name varchar2(20)); SQL> insert into test values(1,'a'); SQL> ins…
有以下數據 deptname phone username isboss 部門A 電話1 員工A 0 部門A 電話1 領導A 1 部門B 電話2 員工B 0 部門B 電話2 員工C 0 部門B 電話2 領導D 1 需要展示效果 deptname phone boss emp 部門A 電話1 領導A 員工A 部門B 電話2 領導D 員工B,員工C 因為是oracle10g的原因,所以使用了wm_concat函數,但對wm_concat結果長度有限制,超出會報ORA-22922:不存在的LOB值,這…
WM_CONCAT是oracle的非公開函數,并不鼓勵使用,新版本oracle并沒有帶此函數,需要手工加上. 1.下載三個文件:owmctab.plb ?. owmaggrs.plb . owmaggrb.plb 2.用sqlplus登錄:sqlplus -logon sys/123 as sysdba 3.執行@C:\Users\JOYTRAVEL\Desktop\WMSYS用戶\owmaggrb.plb; 如果執行結果報錯,說找不到WMSYS用戶,那么執行?@C:\Users\JOYTRAV…
轉載自:http://blog.itpub.net/post/42245/522757 首先讓我們來看看這個神奇的函數wm_concat(列名),該函數可以把列值以","號分隔起來,并顯示成一行,接下來上例子,看看這個神奇的函數如何應用 準備測試數據 SQL> create table test(id number,name varchar2(20)); SQL> insert into test values(1,'a'); SQL> insert into tes…
一.wm_concat函數 wm_concat能夠實現同樣的功能,但是有時在11g中使用需要用to_char()進行轉換,否則會出現不兼容現象(WMSYS.WM_CONCAT: 依賴WMSYS 用戶,不同oracle環境時可能用不了,返回類型為CLOB,可用substr截取長度后to_char轉化為字符類型). 測試用表test_org_bak select * from test_org_bak; 1.:行轉列(默認逗號隔開) select wm_concat(level_four_name)…
ORACLE可以借助DECODE函數,自定義順序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' as item from dual union all select 'Glen' as item from dual union all select 'Robin' as item from dual union all select 'Total' as item from dual ) pr…
http://dacoolbaby.iteye.com/blog/1698957 --20180327 重寫wm_concat函數,解決行數超過上限問題 /*執行前請將APPS替換為當前登錄用戶*/ --1.創建自定義類型t_yd_concatCREATE OR REPLACE TYPE APPS.t_yd_concatAUTHID CURRENT_USER AS OBJECT( CURR_STR clob, STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCT…
ORACLE可以借助DECODE函數,自定義順序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' as item from dual union all select 'Glen' as item from dual union all select 'Robin' as item from dual union all select 'Total' as item from dual ) pr…
MySQL常規排序.自定義排序和按中文拼音字母排序,在實際的SQL編寫時,我們有時候需要對條件集合進行排序. 下面給出3中比較常用的排序方式,mark一下 1.常規排序ASC DESC ASC 正序 DESC倒敘 -- 此處不用多講 2.自定義排序 自定義排序是根據自己想要的特定字符串(數字)順序進行排序. 主要是使用函數 FIELD(str,str1,str2,str3,...) MySQL的自定義排序,str與str1.str2.str3...進行比較,并按照str1,str2,str3..…
用wm_concat連接拼接字符串,測試環境是10g,一切正常 到了生產環境是11g,點開直接報錯了 wm_concat函數在oracle 10g返回的是字符串,到了11g返回的是clob 解決辦法:to_char(wm_concat())…
對于將一列多值合并成一行問題,oracle提供了wmsys.wm_concat和listagg函數處理此問題,下面我們以emp表中數據為例,看看兩函數的使用方法 假設我們需要統計每種job下面有哪些員工,要求在一行顯示員工姓名,首先看看emp表中的數據: ①利用listagg函數處理 ②利用wm_concat函數處理 wm_concat函數作用:除了處理多行合并問題,還給我們直接根據某個表的字段建立視圖帶來方便 ③注意分析函數中的partition by 與group by 的區別 下面我們看看…
在Oracle中使用wm_concat(column)可以實現字段的分組合并,逗號分隔. 例如,現有表temp_cwh_test: -- 創建臨時表 create table temp_cwh_test ( u_id ), goods ), num ) ) -- 插入數據 insert into temp_cwh_test(u_id, goods, num) ); insert into temp_cwh_test(u_id, goods, num) ); insert into temp_cw…
昨天在測試的時候發現,開發人員寫的一段程序放在開發庫中是好的,但是放在測試庫中就會有問題.開發人員一直找不到問題的原因在哪里.于是就花了點時間協助開發人員來找問題的根本原因. 通過一些技術手段,定位到問題是由一個SQL語句引起的. SQL語句如下: WITH PXQ_TASK_TEMP AS (SELECT A.DISTRIBUTE_DATE, ???????? A.APP_NO, ???????? A.TASK_ID, ???????? A.TASK_NO, ???????? A.ACTUAL…
REGEXP_SUBSTR函數格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr ? ? :需要進行正則處理的字符串__pattern ? ?:進行匹配的正則表達式__position ? :起始位置,從第幾個字符開始正則表達式匹配(默認為1)__occurrence :標識第幾個匹配組,默認為1__modifier ? :模式('i'不區分大小寫進行檢索:'c'區分大小寫進行…
這個是因為字符集的問題,和空值是沒關系的.其實已經取到了數據,可以驗證一下返回的不是0,但是由于這個里面有個chr(0)字符,而且可能第一個字符就是chr(0),所以就顯示得怪異的空現象.至于為何會出現chr(0),這就是因為WM_CONCAT函數的問題了,可能它對于多種字符集的處理不是很好吧,所以如果里面的參數不用to_char處理一下,就有可能出現亂碼甚至為空的現象. 像這樣: wmsys.wm_concat(to_char(tab.SYSTEM_SYMBOL)) AS SYSTEM_SYM…
先執行: create or replace type string_sum_obj as object ( --聚合函數的實質就是一個對象 sum_string ), static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number, --對象初始化 member function ODCIAggregateIterate(self in out string_sum_obj, value i…
方法一 wn_concat() 函數 1.把以下圖中Name一樣的數據合并為一條,而且NO的值要這樣顯示如 C.1,C.2 2.實現這種效果的操作如下,先把Name的值進行分組(group by),再把NO的值用 wm_concat()函數合并起來(注意:記得要to_char(),要不然數據顯示不出來) 方法二 listagg() 函數 第一步和上面的一致 使用 listagg()函數 要把within group(order by s.no) 加上,它們是一體的…
業務場景 本博客記錄一下Oracle列轉行函數在Oracle11的一些不兼容問題,vm_concat在一些業務場景是必須的.不過這個函數使用要謹慎,底層實現應該也是group by等等實現的,性能并不是特別好.這個函數在Oracle12是沒有的,在Oracle11是不太兼容的,Oracle10可以正常使用.最近遇到這個問題,網上博客很多都寫到了自定義列轉行函數的辦法去解決.但是這種辦法并不一定適用所有的業務場景.我并沒有采用.不過有些場景還是可以使用的. 網上優秀例子 下面是網絡記錄比較詳細的例…
Oracle經常使用函數 --TRUNC,TO_DATE,TO_CHAR,TO_NUMBER, SUBSTR,REPLACE.NVL?.TRIM,wm_concat,upper, lower,length,add_months(sysdate,1) 查看oracle版本號: SELECT * from v$version 一.trunc函數 1.TRUNC(for dates) TRUNC函數為指定元素而截去的日期值. 其詳細的語法格式例如以下: TRUNC(date[,fmt]) 當中:dat…
時間?2014-02-25 00:05:38??ITeye-博客 原文??http://53873039oycg.iteye.com/blog/2021445 主題?MySQLOracle數據庫 昨天突然在?一篇博客中看到了Mysql也有rollup函數,原博文使用了rollup進行行列統計,原博文鏈接如下: http://www.cnblogs.com/lhj588/archive/2012/06/15/2550392.html 本博文主要是記錄下mysql和oracle使用rollup函數進…
1.前言 Oracle可用連接函數會介紹以下幾個 Oracle列轉行函數 Listagg() strcat() wmsys.wm_concat() 2.Oracle列轉行函數 Listagg() 2.1最基礎的用法: LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)用法就像聚合函數一樣,通過Group by語句,把每個Group的一個字段,拼接起來.其中LISTAGG函數第一個參數為要拼接的字段,第二個參數為用什么字符串進行連接eg : listagg(c…
Oracle 中 decode 函數用法 含義解釋:decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 該函數的含義如下:IF 條件=值1 THEN RETURN(翻譯值1)ELSIF 條件=值2 THEN RETURN(翻譯值2) ......ELSIF 條件=值n THEN RETURN(翻譯值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的運算,值1,值2,值3) 這個函數運行的結果是,當字段或字段的運算的值等于值1時,該函數返回值…
create or replace function Fuc_Get_AuthorName(RecID_In in varchar2, AdmID_In in varchar2) return varchar2 is Result varchar2(8000); names varchar2(4000); Cursor Cur_Get_AuthorNameS Is SELECT PEOPLENAME From TB_NEWS_CONTRI_AUTHOR Where REC_ID=RecID_In…
ORACLE 常用字符函數1 ASCII(arg1)返回參數arg1的十進制數字表示.如果數據庫設置為ASCII,則采用的是ASCII碼字符.如果設置為EBCDIC,則采用的是EBCDIC字符 select ascii('A') from dual; ASCII('A')---------- 65 2 CHR(arg1,[using nchar_cs])返回由參數arg1的代碼所指定的字符.所返回的字符依賴于oracle所使用的底層字符編碼設置. select chr(65) from dual…
Oracle的Nvl函數 nvl( ) 函數 從兩個表達式返回一個非null 值. 語法 NVL(eExpression1, eExpression2) 參數 eExpression1, eExpression2 如 果 eExpression1 的計算結果為 null 值,則 NVL( ) 返回 eExpression2.如果 eExpression1 的計算結果不是 null 值,則返回 eExpression1.eExpression1 和 eExpression2 可以是任意一種數據類型…
mysql日期和時間格式轉換 Linux?scp?使用詳解 Oracle/Mysql/SqlServer函數區別 2011-07-01 12:34:36|??分類: Mysql技術 |??標簽:mysql??sqlsever??oracle??函數?? |舉報 |字號大中小?訂閱 ? ? Sql代碼 1.類型轉換 --Oracle select to_number('123') from dual;?--123; select to_char(33) from dual;??--33; sele…
[轉]Oracle集合操作函數:union.intersect.minus 集合操作符專門用于合并多條select 語句的結果,包括:UNION, UNION ALL, INTERSECT, MINUS.當使用集合操作符時,必須確保不同查詢的列個數和數據類型匹配. 集合操作符具有以下注意事項: 集合操作符不適用于LOB.VARRAY和嵌套表列. UNION.INTERSECT.MINUS操作符不使用于 LONG列. 如果選擇列表中包含有表達式或者函數,那么必須為表達式或者函數定義列別名. 1.U…
總結
以上是生活随笔為你收集整理的oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 202,Oracle Ce
- 下一篇: linux内核4.0,新闻|Linux内