ORACLE字符串的连接聚合函数可用于group by
1.新建type strcat_type
www.2cto.com
-- 定义类型 聚合函数的本质就是一个对象
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 www.2cto.com
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;
www.2cto.com
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)
咖啡
咖啡厅,咖啡屋,咖啡店
生活生计
舒适的生活生计,安适的生活生计
音乐
风行音乐,古典音乐