Welcome 微信登录

首页 / 数据库 / MySQL / Oracle字符串的连接聚合函数可用于group by

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)
咖啡 咖啡厅,咖啡屋,咖啡店
生活 恬静的生活,安逸的生活
音乐 流行音乐,古典音乐 Oracle sqlldr导入以回车和回车换行字符结尾的文本Oracle中删除重复记录行相关资讯      oracle数据库教程 
  • Oracle raw数据类型介绍  (01/29/2013 10:05:53)
  • 监听器注册与ORA-12514 错误分析  (11/13/2012 14:30:08)
  • Oracle SQL的cursor理解  (11/13/2012 14:16:17)
  • Oracle 如何强制刷新Buffer Cache  (01/29/2013 10:02:46)
  • dblink致Oracle库的SCN变成两库的  (11/13/2012 14:24:41)
  • Linux操作系统下完全删除Oracle数  (11/13/2012 08:25:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数