Posted on 2011-08-15 11:01
xcp 閱讀(1004)
評論(0) 編輯 收藏 所屬分類:
Database
--
/*****************************************
功能: 破解移植wm_concat
作者:xcp
日期:2011-07-14
說明:wm_concat出現在oracle10g版本中,不僅是加密的,而且是在一個單獨的用戶中,不方便使用。并且10g以前的版本也用不上。經過破解移植,可以方便大家使用
將下邊的一個type,一個函數的創建腳本執行,就可以構建自己的wm_concat(這里叫zh_concat)。使用方法同wm_concat:
******************************************/
--type:
create or replace TYPE za_concat_im
AUTHID CURRENT_USER AS OBJECT
(
CURR_STR VARCHAR2(32767),
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT za_concat_im) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT za_concat_im,
P1 IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN za_concat_im,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT za_concat_im,
SCTX2 IN za_concat_im) RETURN NUMBER
);
/
create or replace TYPE BODY za_concat_im
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT za_concat_im)
RETURN NUMBER
IS
BEGIN
SCTX := za_concat_im(NULL) ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT za_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;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN za_concat_im,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURNVALUE := CURR_STR ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT za_concat_im,
SCTX2 IN za_concat_im)
RETURN NUMBER
IS
BEGIN
IF(SCTX2.CURR_STR IS NOT NULL) THEN
SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
END IF;
RETURN ODCICONST.SUCCESS;
END;
END;
/
--函數:
create or replace FUNCTION za_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING za_concat_im ;
/
名稱: ?4C.ESL | .↗Evon
口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
mail: 聯系我