J2EE社區

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          破解移植wm_concat

          Posted on 2011-08-15 11:01 xcp 閱讀(1007) 評論(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: 聯系我


          主站蜘蛛池模板: 历史| 虎林市| 江山市| 巴中市| 湖北省| 五家渠市| 成都市| 扬州市| 张家界市| 陇南市| 高阳县| 磐石市| 五台县| 五莲县| 炎陵县| 龙口市| 宿松县| 溧阳市| 布尔津县| 紫云| 故城县| 南涧| 应城市| 达拉特旗| 耿马| 龙泉市| 秀山| 上林县| 区。| 朝阳县| 滨州市| 叶城县| 建德市| 南乐县| 革吉县| 星座| 磴口县| 新民市| 黑河市| 东丰县| 抚松县|