您好,欢迎访问一九零五行业门户网

Oracle字符串的连接聚合函数可用于group by

1.新建type strcat_type -- 定义类型 聚合函数的实质就是一个对象 create or replace type strcat_type as object ( cat
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.结果
select * from t_test t;
id      keyword synonyms
1 咖啡 咖啡厅
2 咖啡 咖啡屋
3 咖啡 咖啡店
4 音乐 流行音乐
5 音乐 古典音乐
6 生活 恬静的生活
7 生活 安逸的生活
_________________________________________
select  t.keyword,func_strcat(t.synonyms)
from t_test t group by t.keyword;
keyword func_strcat(t.synonyms)
咖啡 咖啡厅,咖啡屋,咖啡店
生活 恬静的生活,安逸的生活
音乐 流行音乐,古典音乐

其它类似信息

推荐信息