oracle wm_concat自定义

来源:互联网 发布:ios艺术字体软件 编辑:程序博客网 时间:2024/05/14 07:09
首先说明下为什么要自定义

有些oracle版本这个函数是不稳定的,另外呢,oracle10.1.0升级成10.2.0之后你会发现这个函数返回的是clob不再是varchar2了,使用过程中出现不存在clob值,所以才自定义这个函数


--声明主体
create or replace TYPE zh_concat_im 
AUTHID CURRENT_USER AS OBJECT
(
  CURR_STR VARCHAR2(32767),
  STATIC FUNCTIONODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) RETURNNUMBER,
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELFIN OUT zh_concat_im, 
             P1 IN VARCHAR2) RETURNNUMBER,
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELFIN zh_concat_im,
                            RETURNVALUE OUTVARCHAR2,
                            FLAGS IN NUMBER)
                  RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF INOUT zh_concat_im, 
                 SCTX2 IN  zh_concat_im) RETURNNUMBER
);



--实现类
CREATE OR REPLACE TYPE BODY ZH_CONCAT_IM
IS
  STATIC FUNCTIONODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im)
  RETURN NUMBER
  IS
  BEGIN
    SCTX :=zh_concat_im(NULL) ;
    RETURNODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELFIN OUT zh_concat_im,
         P1 IN VARCHAR2)
  RETURN NUMBER
  IS
  BEGIN
    IF(CURR_STR IS NOT NULL)THEN
     CURR_STR := CURR_STR || ','|| P1;
    ELSE
     CURR_STR := P1;
    END IF;
    RETURNODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELFIN zh_concat_im,
                            RETURNVALUE OUTVARCHAR2,
                            FLAGS IN NUMBER)
    RETURN NUMBER
  IS
  BEGIN
    RETURNVALUE := CURR_STR;
    RETURNODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF INOUT zh_concat_im,
                              SCTX2 INzh_concat_im)
  RETURN NUMBER
  IS
  BEGIN
    IF(SCTX2.CURR_STR IS NOTNULL) THEN
     SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
    END IF;
    RETURNODCICONST.SUCCESS;
  END;
END;

--创建方法
CREATE OR REPLACE FUNCTION zh_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING zh_concat_im ;

调用时候用zh_concat 替换原来的wm_concat


                                                                               本文原创,转载请注明出处
0 0
原创粉丝点击