資料區塊損壞後修複 ORA-01578

來源:互聯網
上載者:User

在Oracle資料庫中,進列欄位合并,可以使用wm_concat(column)函數,但是在這種方法不被Oracle所推薦,因為WMSYS使用者用於Workspace Manager,其函數對象可能因版本而不同而出現異常,這種變化在11.2.0.3及10.2.0.5中體現出來。原本WM_CONCAT函數傳回值為VARCHAR2,但在一些版本下就會變更為CLOB。這一變化導致了很多程式的異常。

Oracle建議使用者使用自訂函數來實現該功能,而不是使用WorkSpace的這個內建函式。這個函數包含一個Type、Type Body、Function,可以參考Oracle的實現方式來實現這個函數。

下面分別介紹oracle中wm_concat(column)函數的使用和多行記錄合并自訂函數 zh_concat

一、oracle中wm_concat(column)函數的使用

t_student表:

SNAME        SDREE        SAGE        SEX

李坤        天融信        26        男

曹貴生        中銀        26        男

柳波        買賣寶        27        男

紀爭光        IBM        23        女

李學宇        微軟        25        女

李雪琪        文思        25        女

陳緒        中海油        26        男

韓正陽        中海油        24        男

陳偉東        中核        24        男

劉兵        優酷        24        男

丁成雲        聯想        25        女

王鵬        中興        25        男

 

想要的結果為:

--------------------------------

男        李坤,曹貴生,柳波,陳偉東,韓正陽,陳緒,劉兵,王鵬

女        紀爭光,李學宇,丁成雲,李雪琪

---------------------------------

SQL語句為:

select t.sex,wmsys.wm_concat(t.sname)from t_student tgroup by t.sex

二、自訂函數zh_concat(從網上摘,直接可用)

wm_concat出現在oracle10g版本中,不僅是加密的,而且是在一個單獨的使用者中,不方便使用。並且10g以前的版本也用不上。經過破解移植,可以方便大家使用

將下邊的一個type,一個函數的建立指令碼執行,就可以構建自己的wm_concat(這裡叫zh_concat)。使用方法同wm_concat:

type:

 

create or replace TYPE zh_concat_im

AUTHID CURRENT_USER AS OBJECT

(

  CURR_STR VARCHAR2(32767),

  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) RETURN NUMBER,

  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,

              P1 IN VARCHAR2) RETURN NUMBER,

  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,

                                RETURNVALUE OUT VARCHAR2,

                                FLAGS IN NUMBER)

                    RETURN NUMBER,

  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,

                    SCTX2 IN  zh_concat_im) RETURN NUMBER

);

/

 

create or replace TYPE BODY zh_concat_im

IS

  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im)

  RETURN NUMBER

  IS

  BEGIN

    SCTX := zh_concat_im(NULL) ;

    RETURN ODCICONST.SUCCESS;

  END;

  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN 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;

    RETURN ODCICONST.SUCCESS;

  END;

  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_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 zh_concat_im,

                                  SCTX2 IN zh_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 zh_concat(P1 VARCHAR2)

RETURN VARCHAR2 AGGREGATE USING zh_concat_im ;

SPFILE 錯誤導致資料庫無法啟動(ORA-01565)

ORA-01172、ORA-01151錯誤處理

ORA-00600 [2662]錯誤解決

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.