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

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

WBOY
WBOYOriginal
2016-06-07 17:11:262111browse

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)
咖啡 咖啡厅,咖啡屋,咖啡店
生活 恬静的生活,安逸的生活
音乐 流行音乐,古典音乐

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn