1.新建type strcat_type
- -- 定义类型 聚合函数的本质就是一个对象
- 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
- )
2.建树type body strcat_type
- 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;
- return ODCIConst.Success;
- end;
- member function ODCIAggregateTerminate(self IN Out strcat_type,
- returnValue OUT varchar2,
- flags IN number)
- return number
- is
- begin
- /*去除空(is null)*/
- 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;
3.建树函数func_strcat
- CREATE OR REPLACE FUNCTION func_strcat(input varchar2)
- RETURN varchar2 -- 返回值
- PARALLEL_ENABLE AGGREGATE USING strcat_type; --使平行累加
4.成果 * t_test t; id keyword synonyms 1 咖啡 咖啡厅 2 咖啡 咖啡屋 3 咖啡 咖啡店 4 音乐 风行音乐 5 音乐 古典音乐 6 生活生计 舒适的生活生计 7 生活生计 安适的生活生计 _________________________________________ t.keyword,func_strcat(t.synonyms) t_test t group by t.keyword; keyword func_strcat(t.synonyms) 咖啡 咖啡厅,咖啡屋,咖啡店 生活生计 舒适的生活生计,安适的生活生计 音乐 风行音乐,古典音乐