日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)

發布時間:2024/1/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 9i sql_id,Oracle9i增添 wm_concat函数(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當前位置:我的異常網? 數據庫???Oracle9i增添 wm_concat函數(轉)

Oracle9i增添 wm_concat函數(轉)

www.myexceptions.net??網友分享于:2013-08-31??瀏覽:742次

Oracle9i添加 wm_concat函數(轉)

一:

創建type頭

create or replace type string_sum_obj as object (

--聚合函數的實質就是一個對象

sum_string varchar2(4000),

static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number,

--對象初始化

member function ODCIAggregateIterate(self in out string_sum_obj, value in varchar2) return number,

--聚合函數的迭代方法(這是最重要的方法)

member function ODCIAggregateMerge(self in out string_sum_obj, v_next in string_sum_obj) return number,

--當查詢語句并行運行時,才會使用該方法,可將多個并行運行的查詢結果聚合

member function ODCIAggregateTerminate(self in string_sum_obj, return_value out varchar2 ,v_flags in number) return number

--終止聚集函數的處理,返回聚集函數處理的結果.

)

創建type具體

create or replace type body string_sum_obj is

static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number is

begin

v_self := string_sum_obj(null);

return ODCICONST.Success;

end;

member function ODCIAggregateIterate(self in out string_sum_obj, value in varchar2) return number is

begin

/* 連接,解決逗號分隔第一個字母是逗號的問題 */

if not self.sum_string is null then

self.sum_string := self.sum_string ||','|| value;

else

self.sum_string := self.sum_string || value;

end if;

return ODCICONST.Success;

/* 最大值 */

if self.sum_string

self.sum_string:=value;

end if;

/* 最小值 */

if self.sum_string>value then

self.sum_string:=value;

end if;

return ODCICONST.Success;

end;

member function ODCIAggregateMerge(self in out string_sum_obj, v_next in string_sum_obj) return number is

begin

/* 連接 */

self.sum_string := self.sum_string || v_next.sum_string;

return ODCICONST.Success;

/* 最大值 */

if self.sum_string

self.sum_string:=v_next.sum_string;

end if;

/* 最小值 */

if self.sum_string>v_next.sum_string then

self.sum_string:=v_next.sum_string;

end if;

return ODCICONST.Success;

end;

member function ODCIAggregateTerminate(self in string_sum_obj, return_value out varchar2 ,v_flags in number) return number is

begin

return_value:= self.sum_string;

return ODCICONST.Success;

end;

end;

創建函數

create or replace function wm_concat(value Varchar2) return Varchar2

parallel_enable aggregate using string_sum_obj;

二:

先創建這個類型

create or replace type strcat_type as object (

cat_string varchar2(4000),

static function ODCIAggregateInitialize(cs_ctx In Out strcat_type) return number,

member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2) return number,

member function ODCIAggregateMerge(self In Out strcat_type,ctx2 In Out strcat_type) return number,

member function ODCIAggregateTerminate(self In Out strcat_type,returnValue Out varchar2,flags in number) return number

)

缺少類型體內容:

....

然后創建這個函數

CREATE OR REPLACE FUNCTION strcat(input varchar2 )

RETURN varchar2

PARALLEL_ENABLE AGGREGATE USING strcat_type;

幾個用法:

9i: SYS_CONNECT_BY_PATH 函數

SQL> select id, replace(wmsys.wm_concat(rmak), ',', '') from test group by id;

ID REPLACE(WMSYS.WM_CONCAT(RMAK),

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

9 timggg

21 littlefff

23 tom

SQL> select * from idtable;

ID NAME

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

10 ab

10 bc

10 cd

20 hi

20 ij

20 mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) name from idtable

2? group by id;

ID NAME

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

10 ab,bc,cd

20 hi,ij,mn

SQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable;

ID NAME

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

10 ab,bc,cd

10 ab,bc,cd

10 ab,bc,cd

20 ab,bc,cd,hi,ij,mn

20 ab,bc,cd,hi,ij,mn

20 ab,bc,cd,hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;

ID NAME

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

10 ab

10 ab,bc

10 ab,bc,cd

20 ab,bc,cd,hi

20 ab,bc,cd,hi,ij

20 ab,bc,cd,hi,ij,mn

6 rows selected

個人覺得這個用法比較有趣.

SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable;

ID NAME

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

10 ab,bc,cd

10 ab,bc,cd

10 ab,bc,cd

20 hi,ij,mn

20 hi,ij,mn

20 hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable;

ID NAME

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

10 ab

10 bc

10 cd

20 hi

20 ij

20 mn

6 rows selected

文章評論

總結

以上是生活随笔為你收集整理的oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。