--建立函數類型create type strcat_type as object ( cat_string varchar2(4000), --自訂聚集合函式初始化設定,從這兒開始一個聚集合函式 static function ODCIAggregateInitialize(cs_ctx In Out strcat_type) return number, --自訂聚集合函式,最主要的步驟,這個函數定義我們的聚集合函式具體做什麼操作,後面的例子,是取最大值,最小值,平均值,還是做串連操作.self 為當前聚集合函式的指標,用來與前面的計算結果進行關聯 member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2) return number, --用來合并兩個聚集合函式的兩個不同的指標對應的結果,使用者合并不同結果結的資料,特別是處理並行(parallel)查詢聚集合函式的時候. 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 type body strcat_type is static function ODCIAggregateInitialize(cs_ctx IN OUT strcat_type) return number is begin cs_ctx := strcat_type(null); return ODCIConst.Success; end; member function ODCIAggregateIterate(self IN OUT strcat_type, value IN varchar2 ) return number is begin self.cat_string := self.cat_string|| value; -- 2.get union set -- if instr(self.cat_string, value ) = 0 or self.cat_string is null then -- self.cat_string := self.cat_string || ',' || value ; -- else -- self.cat_string := self.cat_string ||'' ; -- end if ; return ODCIConst.Success; end; member function ODCIAggregateTerminate(self IN Out strcat_type, returnValue OUT varchar2, flags IN number) return number is begin returnValue := ltrim(rtrim(self.cat_string,','),','); return ODCIConst.Success; end; member function ODCIAggregateMerge(self IN OUT strcat_type, ctx2 IN Out strcat_type) return number is begin self.cat_string := self.cat_string || ',' || ctx2.cat_string; return ODCIConst.Success; end;end;/*函數調用*/CREATE or REPLACE FUNCTION strcat(input varchar2) RETURN varchar2PARALLEL_ENABLE AGGREGATE USING strcat_type;