聚集函数----字符串连接

oracle自定义聚集函数接口简介
   a. static function ODCIAggregateInitialize(sctx IN OUTstring_agg_type )    
               return number
   自定义聚集函数初始化设置,从这儿开始一个聚集函数
   b. member function ODCIAggregateIterate(self IN OUT string_agg_type ,value IN varchar2)
               return number
    自定义聚集函数,最主要的步骤,这个函数定义我们的聚集函数具体做什么操作,后面的例子,是取最大值,最小值,平均值,还是做连接操作.self 为当前聚集函数的指针,用来与前面的计算结果进行关联
   c. member function ODCIAggregateMerge (self IN string_agg_type,returnValue OUT  varchar2,flags IN number)
             return number
     用来合并两个聚集函数的两个不同的指针对应的结果,用户合并不同结果结的数据,特别是处理并行(parallel)查询聚集函数的时候.
    d. member function OCDIAggregateTerminate(self IN string_agg_type,returnValue OUT varchar2,flags IN number)
     终止聚集函数的处理,返回聚集函数处理的结果.
字符串连接函数:
第一步:TYPE
CREATE OR REPLACE TYPE T_LINK_STR AS OBJECT (
    STR VARCHAR2(30000),
    STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK_STR) RETURN NUMBER,
    MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK_STR, VALUE IN VARCHAR2) RETURN NUMBER,
    MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK_STR, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER,
    MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK_STR, CTX2 IN T_LINK_STR) RETURN NUMBER
    )
第二步:TYPE BODY
CREATE OR REPLACE TYPE BODY T_LINK_STR IS
 
 STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK_STR) RETURN NUMBER IS
   BEGIN
     SCTX := T_LINK_STR(NULL);
     RETURN ODCICONST.SUCCESS;
   END;
 
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK_STR, VALUE IN VARCHAR2) RETURN NUMBER IS
   BEGIN
     SELF.STR := SELF.STR || VALUE||';';
     RETURN ODCICONST.SUCCESS;
   END;
 
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK_STR, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER IS
   BEGIN
     RETURNVALUE := SELF.STR;
     RETURN ODCICONST.SUCCESS;
   END;
  
   MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK_STR, CTX2 IN T_LINK_STR) RETURN NUMBER IS
    BEGIN
      NULL;
      RETURN ODCICONST.SUCCESS;
    END;
END;
 
第三步:FUNCTION
CREATE OR REPLACE FUNCTION STR_SUM(P_STR VARCHAR2) RETURN VARCHAR2
 PARALLEL_ENABLE AGGREGATE USING T_LINK_STR;
 
 
 函数测试:
create table TABLE1 (   ID      VARCHAR2(10),   T_NAME  VARCHAR2(10),   T_VALUE VARCHAR2(10) )

1
 
select t_name ,str_sum(t_value) from table1 group by t_name
结果如下
 
2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值