總結:整理 oracle異常錯誤處理 .

達芬奇的夢發表於2017-05-02

5.1 異常處理概念

5.1.1 預定義的異常處理

5.1.2 非預定義的異常處理

5.1.3 使用者自定義的異常處理

5.1.4  使用者定義的異常處理<wbr>

5.2 異常錯誤傳播

5.2.1 在執行部分引發異常錯誤

5.2.2 在宣告部分引發異常錯誤

5.3 異常錯誤處理程式設計

5.4  PL/SQL 中使用 SQLCODE, SQLERRM異常處理函式<wbr>


即使是寫得最好的PL/SQL程式也會遇到錯誤或未預料到的事件。一個優秀的程式都應該能夠正確處理各種出錯情況,並儘可能從錯誤中恢復。任何ORACLE錯誤(報告為ORA-xxxxx形式的Oracle錯誤號)、PL/SQL執行錯誤或使用者定義條件(不一寫是錯誤),都可以。當然了,PL/SQL編譯錯誤不能透過PL/SQL異常處理來處理,因為這些錯誤發生在PL/SQL程式執行之前。

ORACLE 提供異常情況(EXCEPTION)和異常處理(EXCEPTION HANDLER)來實現錯誤處理。

異常情況處理(EXCEPTION)是用來處理正常執行過程中未預料的事件,程式塊的異常處理預定義的錯誤和自定義錯誤,由於PL/SQL程式塊一旦產生異常而沒有指出如何處理時,程式就會自動終止整個程式執行.

有三種型別的異常錯誤:

    1. 預定義 ( Predefined )錯誤<wbr><wbr><wbr>

  ORACLE預定義的異常情況大約有24個。對這種異常情況的處理,無需在程式中定義,由ORACLE自動將其引發。<wbr>

    2. 非預定義 ( Predefined )錯誤<wbr><wbr><wbr>

   即其他標準的ORACLE錯誤。對這種異常情況的處理,需要使用者在程式中定義,然後由ORACLE自動將其引發。<wbr><wbr>

    3. 使用者定義(User_define) 錯誤<wbr><wbr><wbr>

程式執行過程中,出現程式設計人員認為的非正常情況。對這種異常情況的處理,需要使用者在程式中定義,然後顯式地在程式中將其引發。

異常處理部分一般放在 PL/SQL 程式體的後半部,結構為:

EXCEPTION
   WHEN first_exception THEN 
   WHEN second_exception THEN 
   WHEN OTHERS THEN 
END;
<wbr><wbr><wbr>
<wbr><wbr><wbr>
<wbr><wbr><wbr>
 <wbr>

異常處理可以按任意次序排列, OTHERS 必須放在最後.

預定義的異常處理

   預定義說明的部分 ORACLE 異常錯誤<wbr><wbr>

錯誤號

異常錯誤資訊名稱

說明

ORA-0001

Dup_val_on_index

違反了唯一性限制

ORA-0051

Timeout-on-resource

在等待資源時發生超時

ORA-0061

Transaction-backed-out

由於發生死鎖事務被撤消

ORA-1001

Invalid-CURSOR

試圖使用一個無效的遊標

ORA-1012

Not-logged-on

沒有連線到ORACLE

ORA-1017

Login-denied

無效的使用者名稱/口令

ORA-1403

No_data_found

SELECT INTO沒有找到資料

ORA-1422

Too_many_rows

SELECT INTO 返回多行

ORA-1476

Zero-divide

試圖被零除

ORA-1722

Invalid-NUMBER

轉換一個數字失敗

ORA-6500

Storage-error

記憶體不夠引發的內部錯誤

ORA-6501

Program-error

內部錯誤

ORA-6502

Value-error

轉換或截斷錯誤

ORA-6504

Rowtype-mismatch

宿主遊標變數與 PL/SQL變數有不相容行型別

ORA-6511

CURSOR-already-OPEN

試圖開啟一個已處於開啟狀態的遊標

ORA-6530

Access-INTO-null

試圖為null 物件的屬性賦值

ORA-6531

Collection-is-null

試圖將Exists 以外的集合( collection)方法應用於一個null pl/sql 表上或varray

ORA-6532

Subscript-outside-limit

對巢狀或varray索引得引用超出宣告範圍以外

ORA-6533

Subscript-beyond-count

對巢狀或varray 索引得引用大於集合中元素的個數.

對這種異常情況的處理,只需在PL/SQL塊的異常處理部分,直接引用相應的異常情況名,並對其完成相應的異常錯誤處理即可。

1更新指定員工工資,如工資小於1500,則加100

 <wbr>

DECLARE
   v_empno employees.employee_id%TYPE := &empno;
   v_sal   employees.salary%TYPE;
BEGIN
   SELECT salary INTO v_sal FROM employees WHERE employee_id = v_empno;
   IF v_sal<=1500 THEN
        UPDATE employees SET salary = salary + 100 WHERE employee_id=v_empno;
        DBMS_OUTPUT.PUT_LINE('編碼為'||v_empno||'員工工資已更新!');    
   ELSE
        DBMS_OUTPUT.PUT_LINE('編碼為'||v_empno||'員工工資已經超過規定值!');
   END IF;
EXCEPTION
   WHEN NO_DATA_FOUND THEN 
      DBMS_OUTPUT.PUT_LINE('資料庫中沒有編碼為'||v_empno||'的員工');
   WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.PUT_LINE('程式執行錯誤!請使用遊標');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

 <wbr>

對於這類異常情況的處理,首先必須對非定義的ORACLE錯誤進行定義。步驟如下:

1. 在PL/SQL 塊的定義部分定義異常情況:

<異常情況>  EXCEPTION;<wbr>

2. 將其定義好的異常情況,與標準的ORACLE錯誤聯絡起來,使用EXCEPTION_INIT語句:

PRAGMA EXCEPTION_INIT(<異常情況>, <錯誤程式碼>);

3. 在PL/SQL 塊的異常情況處理部分對異常情況做出相應的處理。

2刪除指定部門的記錄資訊,以確保該部門沒有員工。

INSERT INTO departments VALUES(50, 'FINANCE', 'CHICAGO');

DECLARE
   v_deptno departments.department_id%TYPE := &deptno;
   deptno_remaining EXCEPTION;
   PRAGMA EXCEPTION_INIT(deptno_remaining, -2292);
  
BEGIN
   DELETE FROM departments WHERE department_id = v_deptno;
EXCEPTION
   WHEN deptno_remaining THEN
      DBMS_OUTPUT.PUT_LINE('違反資料完整性約束!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

處理

當與一個異常錯誤相關的錯誤出現時,就會隱含觸發該異常錯誤。使用者定義的異常錯誤是透過顯式使用 RAISE 語句來觸發。當引發一個異常錯誤時,控制就轉向到 EXCEPTION塊異常錯誤部分,執行錯誤處理程式碼。

對於這類異常情況的處理,步驟如下:

1. 在PL/SQL 塊的定義部分定義異常情況:

<異常情況>  EXCEPTION;<wbr>

2. RAISE <<SPAN style="FONT-FAMILY: 宋體">異常情況>

3. 在PL/SQL 塊的異常情況處理部分對異常情況做出相應的處理。

3更新指定員工工資,增加100

DECLARE
   v_empno employees.employee_id%TYPE :=&empno;
   no_result  EXCEPTION;
BEGIN
   UPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;
   IF SQL%NOTFOUND THEN
      RAISE no_result;
   END IF;
EXCEPTION
   WHEN no_result THEN
      DBMS_OUTPUT.PUT_LINE('你的資料更新語句失敗了!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

戶定義的異常處理

呼叫DBMS_STANDARD(ORACLE提供的包)包所定義的RAISE_APPLICATION_ERROR過程,可以重新定義異常錯誤訊息,它為應用程式提供了一種與ORACLE互動的方法。

RAISE_APPLICATION_ERROR 的語法如下:

    RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors] );<wbr><wbr><wbr>

    這裡的error_number 是從 –20,000 –20,999 之間的引數,<wbr><wbr><wbr>

    error_message 是相應的提示資訊(< 2048 位元組)<wbr><wbr><wbr>

keep_errors 為可選,如果keep_errors =TRUE ,則新錯誤將被新增到已經引發的錯誤列表中。如果keep_errors=FALSE(預設),則新錯誤將替換當前的錯誤列表。

4建立一個函式get_salary, 該函式檢索指定部門的工資總和,其中定義了-20991-20992號錯誤,分別處理引數為空和非法部門程式碼兩種錯誤:

CREATE TABLE errlog(
  Errcode NUMBER,
  Errtext CHAR(40));

CREATE OR REPLACE FUNCTION get_salary(p_deptno NUMBER)
RETURN NUMBER
AS
  v_sal NUMBER;
BEGIN
  IF p_deptno IS NULL THEN
    RAISE_APPLICATION_ERROR(-20991, ’部門程式碼為空’);
  ELSIF p_deptno<0 THEN
    RAISE_APPLICATION_ERROR(-20992, ’無效的部門程式碼’);
  ELSE
    SELECT SUM(employees.salary) INTO v_sal FROM employees
    WHERE employees.department_id=p_deptno;
    RETURN v_sal;
  END IF;
END;

DECLARE
  V_salary NUMBER(7,2);
  V_sqlcode NUMBER;
  V_sqlerr VARCHAR2(512);
  Null_deptno EXCEPTION;
  Invalid_deptno EXCEPTION;
  PRAGMA EXCEPTION_INIT(null_deptno,-20991);
  PRAGMA EXCEPTION_INIT(invalid_deptno, -20992);
BEGIN
  V_salary :=get_salary(10);
  DBMS_OUTPUT.PUT_LINE('10號部門工資:' || TO_CHAR(V_salary));

  BEGIN
    V_salary :=get_salary(-10);
  EXCEPTION
    WHEN invalid_deptno THEN
      V_sqlcode :=SQLCODE;
      V_sqlerr  :=SQLERRM;
      INSERT INTO errlog(errcode, errtext)
      VALUES(v_sqlcode, v_sqlerr);
      COMMIT;
  END inner1;

  V_salary :=get_salary(20);
  DBMS_OUTPUT.PUT_LINE('部門號為20的工資為:'||TO_CHAR(V_salary));

  BEGIN
    V_salary :=get_salary(NULL);
  END inner2;

  V_salary := get_salary(30);
  DBMS_OUTPUT.PUT_LINE('部門號為30的工資為:'||TO_CHAR(V_salary));

  EXCEPTION
    WHEN null_deptno THEN
      V_sqlcode :=SQLCODE;
      V_sqlerr  :=SQLERRM;
      INSERT INTO errlog(errcode, errtext) VALUES(v_sqlcode, v_sqlerr);
      COMMIT;
    WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END outer;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

例5:定義觸發器,使用RAISE_APPLICATION_ERROR阻止沒有員工姓名的新員式記錄插入

CREATE OR REPLACE TRIGGER tr_insert_emp
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
  IF :new.first_name IS NULL OR :new.last_name is null THEN
    RAISE_APPLICATION_ERROR(-20000,'Employee must have a name.');
  END IF;
END;<wbr><wbr><wbr><wbr><wbr>
 <wbr>

    由於異常錯誤可以在宣告部分和執行部分以及異常錯誤部分出現,因而在不同部分引發的異常錯誤也不一樣。<wbr><wbr><wbr>

    當一個異常錯誤在執行部分引發時,有下列情況:<wbr><wbr><wbr>

l 如果當前塊對該異常錯誤設定了處理,則執行它併成功完成該塊的執行,然後控制轉給包含塊。

l 如果沒有對當前塊異常錯誤設定定義處理器,則透過在包含塊中引發它來傳播異常錯誤。然後對該包含塊執行步驟1)

    如果在宣告部分引起異常情況,即在宣告部分出現錯誤,那麼該錯誤就能影響到其它的塊。比如在有如下的PL/SQL程式:<wbr><wbr><wbr>

DECLARE
    name varchar2(12):='EricHu';
    其它語句
BEGIN
    其它語句
EXCEPTION
    WHEN OTHERS THEN
    其它語句
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

     例子中,由於Abc number(3)=’abc’; 出錯,儘管在EXCEPTION中說明了WHEN OTHERS THEN語句,但WHEN OTHERS THEN也不會被執行。 但是如果在該錯誤語句塊的外部有一個異常錯誤,則該錯誤能被抓住,如:<wbr><wbr><wbr><wbr>

BEGIN
    DECLARE
    name varchar2(12):='EricHu';
    其它語句
   BEGIN
    其它語句
   EXCEPTION
    WHEN OTHERS THEN
    其它語句
    END;
EXCEPTION
WHEN OTHERS THEN
    其它語句
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

    在一般的應用處理中,建議程式人員要用異常處理,因為如果程式中不宣告任何異常處理,則在程式執行出錯時,程式就被終止,並且也不提示任何資訊。下面是使用系統提供的異常來程式設計的例子。<wbr><wbr><wbr>

異常處理函式

    由於ORACLE 的錯資訊最大長度是512位元組,為了得到完整的錯誤提示資訊,我們可用 SQLERRM SUBSTR 函式一起得到錯誤提示資訊,方便進行錯誤,特別是如果WHEN OTHERS異常處理器時更為方便。<wbr><wbr><wbr>

SQLCODE  返回遇到的Oracle錯誤號,<wbr>

SQLERRM  返回遇到的Oracle錯誤資訊.<wbr>

:  SQLCODE=-100   è SQLERRM=’no_data_found ‘<wbr><wbr><wbr>

SQLCODE=0      è SQLERRM=’normal, successfual completion’<wbr><wbr><wbr><wbr><wbr>

例6. 將ORACLE錯誤程式碼及其資訊存入錯誤程式碼表

CREATE TABLE errors (errnum NUMBER(4), errmsg VARCHAR2(100));

DECLARE
   err_msg  VARCHAR2(100);
BEGIN
  
   FOR err_num IN -100 .. 0 LOOP
      err_msg := SQLERRM(err_num);
      INSERT INTO errors VALUES(err_num, err_msg);
   END LOOP;
END;
DROP TABLE errors;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

例7. 查詢ORACLE錯誤程式碼;

BEGIN
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(2222, 'Eric','Hu', SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
  
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(2222, '胡','勇', SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

例8. 利用ORACLE錯誤程式碼,編寫異常錯誤處理程式碼;

DECLARE
   empno_remaining EXCEPTION;
   PRAGMA EXCEPTION_INIT(empno_remaining, -1);
  
BEGIN
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(3333, 'Eric','Hu', SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
  
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(3333, '胡','勇',SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
EXCEPTION
   WHEN empno_remaining THEN
      DBMS_OUTPUT.PUT_LINE('違反資料完整性約束!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
 <wbr>

1、異常的優點
  
  如果沒有異常,在程式中,應當檢查每個命令的成功還是失敗,如
  BEGIN
  SELECT ...
  -- check for ’no data found’ error
  SELECT ...
  -- check for ’no data found’ error
  SELECT ...
  -- check for ’no data found’ error
  這種實現的方法缺點在於錯誤處理沒有與正常處理分開,可讀性差,使用異常,可以方便處理錯誤,而且異常處理程式與正常的事務邏輯分開,提高了可讀性,如
  BEGIN
  SELECT ...
  SELECT ...
  SELECT ...
  ...
  EXCEPTION
  WHEN NO_DATA_FOUND THEN -- catches all ’no data found’ errors
  
  2、異常的分類
  
  有兩種型別的異常,一種為內部異常,一種為使用者自定義異常,內部異常是執行期間返回到PL/SQL塊的ORACLE錯誤或由PL/SQL程式碼的某操作引起的錯誤,如除數為零或記憶體溢位的情況。使用者自定義異常由開發者顯示定義,在PL/SQL塊中傳遞資訊以控制對於應用的錯誤處理。
  
  每當PL/SQL違背了ORACLE原則或超越了系統依賴的原則就會隱式的產生內部異常。因為每個ORACLE錯誤都有一個號碼並且在PL/SQL中異常透過名字處理,ORACLE提供了預定義的內部異常。如SELECT INTO 語句不返回行時產生的ORACLE異常NO_DATA_FOUND。對於預定義異常,現將最常用的異常列舉如下:
  exception  oracle error  sqlcode value  condition
  no_data_found              ora-01403  +100  select into 語句沒有符合條件的記錄返回
  too_many_rows  ora-01422  -1422  select into 語句符合條件的記錄有多條返回
  dup_val_on_index  ora-00001  -1  對於資料庫表中的某一列,該列已經被限制為唯一索引,程式試圖儲存兩個重複的值
  value_error  ora-06502  -6502  在轉換字元型別,擷取或長度受限時,會發生該異常,如一個字元分配給一個變數,而該變數宣告的長度比該字元短,就會引發該異常
  storage_error  ora-06500  -6500  記憶體溢位
  zero_divide  ora-01476  -1476  除數為零
  case_not_found  ora-06592  -6530  對於選擇case語句,沒有與之相匹配的條件,同時,也沒有else語句捕獲其他的條件
  cursor_already_open  ora-06511  -6511  程式試圖開啟一個已經開啟的遊標
  timeout_on_resource  ora-00051  -51  系統在等待某一資源,時間超時
  
  如果要處理未命名的內部異常,必須使用OTHERS異常處理器或PRAGMA EXCEPTION_INIT 。PRAGMA由編譯器控制,或者是對於編譯器的註釋。PRAGMA在編譯時處理,而不是在執行時處理。EXCEPTION_INIT告訴編譯器將異常名與ORACLE錯誤碼結合起來,這樣可以透過名字引用任意的內部異常,並且可以透過名字為異常編寫一適當的異常處理器。
  
  在子程式中使用EXCEPTION_INIT的語法如下:
  PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);
  
  在該語法中,異常名是宣告的異常,下例是其用法:
  DECLARE
  deadlock_detected EXCEPTION;
  PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
  BEGIN
  ... -- Some operation that causes an ORA-00060 error
  EXCEPTION
  WHEN deadlock_detected THEN
  -- handle the error
  END;
  
  對於使用者自定義異常,只能在PL/SQL塊中的宣告部分宣告異常,異常的名字由EXCEPTION關鍵字引入:
  reserved_loaned Exception
  
  產生異常後,控制傳給了子程式的異常部分,將異常轉向各自異常控制塊,必須在程式碼中使用如下的結構處理錯誤:
  Exception
  When exception1 then
  Sequence of statements;
  When exception2 then
  Sequence of statements;
  When others then
  
  3、異常的丟擲
  
  由三種方式丟擲異常
  
  1. 透過PL/SQL執行時引擎
  
  2. 使用RAISE語句
  
  3. 呼叫RAISE_APPLICATION_ERROR儲存過程
  
  當資料庫或PL/SQL在執行時發生錯誤時,一個異常被PL/SQL執行時引擎自動丟擲。異常也可以透過RAISE語句丟擲
  RAISE exception_name;
  
  顯式丟擲異常是程式設計師處理宣告的異常的習慣用法,但RAISE不限於宣告瞭的異常,它可以丟擲任何任何異常。例如,你希望用TIMEOUT_ON_RESOURCE錯誤檢測新的執行時異常處理器,你只需簡單的在程式中使用下面的語句:
  RAISE TIMEOUT_ON_RESOUCE;
  
  比如下面一個訂單輸入的例子,若當訂單小於庫存數量,則丟擲異常,並且捕獲該異常,處理異常
  DECLARE
  inventory_too_low EXCEPTION;
  
  ---其他宣告語句
  BEGIN
  IF order_rec.qty>inventory_rec.qty THEN
  RAISE inventory_too_low;
  END IF
  EXCEPTION
  WHEN inventory_too_low THEN
  order_rec.staus:='backordered';
  END;
  
  RAISE_APPLICATION_ERROR內建函式用於丟擲一個異常並給異常賦予一個錯誤號以及錯誤資訊。自定義異常的預設錯誤號是+1,預設資訊是User_Defined_Exception。RAISE_APPLICATION_ERROR函式能夠在pl/sql程式塊的執行部分和異常部分呼叫,顯式丟擲帶特殊錯誤號的命名異常。  Raise_application_error(error_number,message[,true,false]))
  
  錯誤號的範圍是-20,000到-20,999。錯誤資訊是文字字串,最多為2048位元組。TRUE和FALSE表示是新增(TRUE)進錯誤堆(ERROR STACK)還是覆蓋(overwrite)錯誤堆(FALSE)。預設情況下是FALSE。
  
  如下程式碼所示:
  IF product_not_found THEN
  RAISE_APPLICATION_ERROR(-20123,'Invald product code' TRUE);
  END IF;
  
  4、異常的處理
  
  PL/SQL程式塊的異常部分包含了程式處理錯誤的程式碼,當異常被丟擲時,一個異常陷阱就自動發生,程式控制離開執行部分轉入異常部分,一旦程式進入異常部分就不能再回到同一塊的執行部分。下面是異常部分的一般語法:
  EXCEPTION
  WHEN exception_name THEN
  Code for handing exception_name
  [WHEN another_exception THEN
  Code for handing another_exception]
  [WHEN others THEN
  code for handing any other exception.]
  
  使用者必須在獨立的WHEN子串中為每個異常設計異常處理程式碼,WHEN OTHERS子串必須放置在最後面作為預設處理器處理沒有顯式處理的異常。當異常發生時,控制轉到異常部分,ORACLE查詢當前異常相應的WHEN..THEN語句,捕捉異常,THEN之後的程式碼被執行,如果錯誤陷阱程式碼只是退出相應的巢狀塊,那麼程式將繼續執行內部塊END後面的語句。如果沒有找到相應的異常陷阱,那麼將執行WHEN OTHERS。在異常部分WHEN 子串沒有數量限制。
  EXCEPTION
  WHEN inventory_too_low THEN
  order_rec.staus:='backordered';
  replenish_inventory(inventory_nbr=>
  inventory_rec.sku,min_amount=>order_rec.qty-inventory_rec.qty);
  WHEN discontinued_item THEN
  --code for discontinued_item processing
  WHEN zero_divide THEN
  --code for zero_divide
  WHEN OTHERS THEN
  --code for any other exception
  END;
  
  當異常丟擲後,控制無條件轉到異常部分,這就意味著控制不能回到異常發生的位置,當異常被處理和解決後,控制返回到上一層執行部分的下一條語句。
  BEGIN
  DECLARE
  bad_credit exception;
  BEGIN
  RAISE bad_credit;
  --發生異常,控制轉向;
  EXCEPTION
  WHEN bad_credit THEN
  dbms_output.put_line('bad_credit');
  END;
  --bad_credit異常處理後,控制轉到這裡
  EXCEPTION
  WHEN OTHERS THEN
  
  --控制不會從bad_credit異常轉到這裡
  
  --因為bad_credit已被處理
  
  END;
  
  當異常發生時,在塊的內部沒有該異常處理器時,控制將轉到或傳播到上一層塊的異常處理部分。
  
  BEGIN
  DECLARE ---內部塊開始
  
  bad_credit exception;
  BEGIN
  RAISE bad_credit;
  
  --發生異常,控制轉向;
  EXCEPTION
  WHEN ZERO_DIVIDE THEN --不能處理bad_credite異常
  dbms_output.put_line('divide by zero error');
  
  END --結束內部塊
  
  --控制不能到達這裡,因為異常沒有解決;
  
  --異常部分
  
  EXCEPTION
  WHEN OTHERS THEN
  --由於bad_credit沒有解決,控制將轉到這裡
  END;
  
  5、異常的傳播
  
  沒有處理的異常將沿檢測異常呼叫程式傳播到外面,當異常被處理並解決或到達程式最外層傳播停止。在宣告部分丟擲的異常將控制轉到上一層的異常部分。
  
  BEGIN
  executable statements
  BEGIN
  today DATE:='SYADATE'; --ERRROR
  
  BEGIN --內部塊開始
  dbms_output.put_line('this line will not execute');
  EXCEPTION
  WHEN OTHERS THEN
  
  --異常不會在這裡處理
  
  END;--內部塊結束
  EXCEPTION
  WHEN OTHERS THEN
  
  處理異常
  
  END


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


處理 oracle 系統自動生成系統異常外,可以使用 raise 來手動生成錯誤。

        Raise exception;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

        Raise package.exception;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

        Raise;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

以上是 raise 的三種使用方法。第一種用於生成當前程式中定義的異常或在 standard 中的系統異常。

       Declare<wbr><wbr><wbr><wbr><wbr><wbr>

              Invalid_id exception;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              Id_values varchar(2);<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       Begin<wbr><wbr><wbr><wbr><wbr><wbr>

              Id_value:=id_for(‘smith’);<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              If substr(id_value,1,1)!=’x’<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              Then<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

                     Raise invalid_id;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              End if;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       Exception<wbr><wbr><wbr><wbr><wbr><wbr>

              When invalid_id<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              Then<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

                     Dbms_output.put_line(‘this is an invalid id!’);<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       End;<wbr><wbr><wbr><wbr><wbr><wbr>

這是一個生成自定義異常的例子,當然也可以生成系統異常:

       declare<wbr><wbr><wbr><wbr><wbr><wbr>

              employee_id_in number;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       Begin<wbr><wbr><wbr><wbr><wbr><wbr>

Select employee_id into employee_id_in from employ_list where employee_name=&n;

If employee_id_in=0

Then

       Raise zero_devided;<wbr><wbr><wbr><wbr><wbr><wbr>

End if;

       Exception<wbr><wbr><wbr><wbr><wbr><wbr>

              When zero_devided<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              Then<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

                     Dbms_output.put_line(‘wrong!’);<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       End;<wbr><wbr><wbr><wbr><wbr><wbr>

有一些異常是定義在非標準包中的,如 UTL_FILE , DBMS_SQL 以及程式設計師建立的包中異常。可以使用 raise 的第二種用法來生成異常。

       If day_overdue(isbn_in, browser_in) > 365<wbr><wbr><wbr><wbr><wbr><wbr>

       Then<wbr><wbr><wbr><wbr><wbr><wbr>

              Raise overdue_pkg.book_is_lost<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       End if;<wbr><wbr><wbr><wbr><wbr><wbr>

在最後一種 raise 的形式中,不帶任何引數。這種情況只出現在希望將當前的異常傳到外部程式時。

       Exception<wbr><wbr><wbr><wbr><wbr><wbr>

              When no_data_found<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

              Then<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

                     Raise;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       End;<wbr><wbr><wbr><wbr><wbr><wbr>

Pl.sql 使用 raise_application_error 過程來生成一個有具體描述的異常。當使用這個過程時,當前程式被中止,輸入輸出引數被置為原先的值,但任何 DML 對資料庫所做的改動將被保留,可以在之後用 rollback 命令回滾。下面是該過程的原型:

       Procedure raise_application_error(<wbr><wbr><wbr><wbr><wbr><wbr>

       Num binary_integer;<wbr><wbr><wbr><wbr><wbr><wbr>

       Msg varchar2;<wbr><wbr><wbr><wbr><wbr><wbr>

       Keeperrorstack Boolean default false<wbr><wbr><wbr><wbr><wbr><wbr>

)

其中 num 是在 -20999 到 -20000 之間的任何數字(但事實上, DBMS_OUPUT 和 DBMS_DESCRIBLE 包使用了 -20005 到 -20000 的數字); msg 是小於 2K 個字元的描述語,任何大於 2K 的字元都將被自動丟棄; keeperrorstack 預設為 false ,是指清空異常棧,再將當前異常入棧,如果指定 true 的話就直接將當前異常壓入棧中。

    CREATE OR REPLACE PROCEDURE raise_by_language (code_in IN PLS_INTEGER)<wbr><wbr><wbr>

    IS<wbr><wbr><wbr>

       l_message error_table.error_string%TYPE;<wbr><wbr><wbr><wbr><wbr><wbr>

    BEGIN<wbr><wbr><wbr>

       SELECT error_string<wbr><wbr><wbr><wbr><wbr><wbr>

         INTO l_message<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

         FROM error_table, v$nls_parameters v<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

        WHERE error_number = code_in<wbr><wbr><wbr><wbr><wbr><wbr><wbr>

          AND string_language = v.VALUE<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

          AND v.parameter = 'NLS_LANGUAGE';<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

       RAISE_APPLICATION_ERROR (code_in, l_message);<wbr><wbr><wbr><wbr><wbr><wbr>

    END;<wbr><wbr><wbr>



ORACL內部異常:

 <wbr>

1:預定義異常 <wbr>

用於處理常見的Oracle錯誤 <wbr>

2:非預定義異常 <wbr>

用於處理預定義異常所不能處理的Oracle錯誤 <wbr>

3:自定義異常 <wbr>

用於處理於Oracle錯誤無關的其他情況 <wbr>

異常處理部分是以關鍵字EXCEPTION開始的,語法如下: <wbr>

  EXCEPTION <wbr><wbr>

    WHEN  exception_Name<wbr> THEN <wbr> --exception_Name為異常的名字 <wbr><wbr><wbr><wbr>

      statement1; <wbr><wbr><wbr><wbr><wbr><wbr>

    WHEN OTHERS THEN <wbr><wbr><wbr><wbr>

  statement1; <wbr><wbr>

異常處理部分從關鍵字EXCEPTION開始,在異常處理部分使用WHEN字句捕捉各種異常,如果有其他未預定義到的異常,使用WHEN OTHERS THEN字句進行捕捉和處理。 <wbr>

  • 1、 處理預定義異常,這是系統預定的21種型別 <wbr>
  •   錯誤程式碼是負整數,如-51 <wbr><wbr>
  •       <wbr><wbr><wbr><wbr><wbr><wbr>
  •  <wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Access_info_null(ora-06530) <wbr><wbr>
  •      當訪問沒有初始化的物件時觸發。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Case_not_found(ora-06592) <wbr><wbr>
  •      case過程中when後沒有包含必要的條件分支並且沒有else子句,則會觸發本異常。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Collection_is_null(06531) <wbr><wbr>
  • 訪問未初始化的集合元素(巢狀表或者varray)。
  •     <wbr><wbr><wbr><wbr>
  •   Cursor_already_open(ora-06511) <wbr><wbr>
  •      重新開啟已經開啟的遊標。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Dup_val_on_index(ora-00001) <wbr><wbr>
  •      當中唯一索引所對應的列上鍵入重複值時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Invalid_cursor(ora-01001) <wbr><wbr>
  • 試圖在不合法的遊標上執行操作時,譬如沒開啟遊標就提取內容
  •     <wbr><wbr><wbr><wbr>
  •   Invalid_number(ora-01722) <wbr><wbr>
  •      當試圖將非法的字串轉換為數字型別時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   No_data_found(ora-01403) <wbr><wbr>
  •      執行select into未返回行,或者引用了索引表未初始化的元素時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Too_many_rows(ora-01422) <wbr><wbr>
  •      執行select into返回超過一行資料時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Zero_divide(ora-01476) <wbr><wbr>
  •      0作為被除數時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Subscript_beyond_count(ora-06533) <wbr><wbr>
  •      使用巢狀表或者varray集合時,如果引用下標超過last。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  • Subscript_outside_limit(ora-06532)
  •      使用巢狀表或varray集合時,如果引用下標小於first。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Value_error(ora-06502) <wbr><wbr>
  •      在執行賦值操作時,如果變數長度不足以容納實際資料。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Login_denied(ora-01017) <wbr><wbr>
  •      連線資料庫時提供了不正確的使用者名稱或口令。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Not_logged_on(ora-01012) <wbr><wbr>
  • 在程式沒有連線到oracle資料庫時執行plsql程式碼則會觸發。
  •     <wbr><wbr><wbr><wbr>
  •   Program_error(ora-06501) <wbr><wbr>
  •      plsql內部問題。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Rowtype_mismatch(ora-06504) <wbr><wbr>
  •      執行賦值操作時,如果宿主遊標變數和PLSQL遊標變數返回型別不相容時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Self_is_null(ora-30625) <wbr><wbr>
  •      使用物件型別時,如果在null例項上呼叫成員方法。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Storage_error(ora-06500) <wbr><wbr>
  •      超出記憶體空間或者記憶體被損壞。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Sys_invalid_rowid(ora-01410) <wbr><wbr>
  •      無效字串企圖轉換為rowid型別時。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •   Timeout_on_resource(ora-00051) <wbr><wbr>
  •      等待資源時出現超時錯誤。 <wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •  <wbr>
  •  <wbr>
  • 2、處理非預定義異常 <wbr>
  • 使用非預定義異常包括三步: <wbr>
  • 一:在定義部分定義異常名, <wbr>
  • 二:在異常和Oracle錯誤之間建立關聯, <wbr>
  • 三:在異常處理部分捕捉並處理異常。 <wbr>
  •  <wbr>
  •  <wbr>
  • 當定義Oracle錯誤和異常之間的關聯關係時,需要使用偽過程EXCEPTION_INIT。 <wbr>
  •  <wbr>
  •  <wbr>
  • 一:首先的定義部分定義異常; <wbr>
  • 二:使用progmaexception_init(exception_name,exception_number) 在異常和oracle錯誤之間建立關聯, <wbr>
  •     這時要求使用者知道可能出現的錯誤號(異常函式sqlcode、sqlerrm和raise_application_error); <wbr><wbr><wbr><wbr>
  • 三:最終在異常處理部分捕捉並處理異常。 <wbr>
  •  <wbr>
  •   <wbr><wbr>
  •  <wbr>
  •  <wbr>
  • 下面以更新特定僱員的部門號,並處理ORA-02291錯誤為例,說明使用非預定義異常的方法。示例如下: <wbr>
  •  <wbr>
  •  <wbr>
  •   DECLARE <wbr><wbr>
  •     e_integrity EXCEPTION;  --1、定義部分 <wbr><wbr><wbr><wbr><wbr>
  •     PRAGMA EXCEPTION_INIT (e_integrity, -2291);  --2、建立關聯關係 <wbr><wbr><wbr><wbr><wbr>
  •   BEGIN <wbr><wbr>
  •     UPDATE  emp<wbr> SET deptno=  &dno<wbr> WHERE  empno = &eno; <wbr><wbr><wbr><wbr><wbr>
  •   EXCEPTION <wbr><wbr>
  •     WHEN  e_integrity<wbr> THEN <wbr> --3、捕捉處理 <wbr><wbr><wbr><wbr>
  •       DBMS_OUTPUT.PUT_LINE(‘該部門不存在’); <wbr><wbr><wbr><wbr><wbr><wbr>
  •   END<wbr><wbr>
  •    <wbr><wbr><wbr>
  •  <wbr>
  •     <wbr><wbr><wbr><wbr>
  • --3、處理自定義異常 <wbr>
  • 預定義異常和非預定義異常都與Oracle錯誤有關,並且當出現Oracle錯誤時會隱含觸發相應異常; <wbr>
  • 而自定義異常與Oracle錯誤沒有任何關聯,它是由開發人員為特定情況所定義的異常。 <wbr>
  •  <wbr>
  •  <wbr>
  • 當使用自定義異常時, <wbr>
  • 一:需要在定義部分(DECLARE)定義異常, <wbr>
  • 二:再執行部分(BEGIN)觸發異常(使用RAISE語句), <wbr>
  • 三:在異常處理部分(EXCEPTION)捕捉並處理異常。 <wbr>
  •  <wbr>
  •  <wbr>
  •   declare <wbr><wbr>
  •    myexception exception; <wbr><wbr><wbr>
  •   begin <wbr><wbr>
  •    <wbr><wbr><wbr>
  • if <wbr>
  • 1=0 <wbr>
  • then <wbr>
  •    <wbr><wbr><wbr>
  • raise myexception; <wbr>
  •    <wbr><wbr><wbr>
  • endif;  <wbr><wbr>
  •   exception <wbr><wbr>
  •    <wbr><wbr><wbr>
  • when <wbr>
  •  <wbr>
  • myexception  <wbr><wbr>
  • then <wbr>
  •        dbms_output.put_line('asdf'); <wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  •   end<wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  • 注意:不能在同一個block中描述EXCEPTION兩次,但是可以描述一個exception在兩個不同的block中。異常(exception)是有作用域的,子塊的異常不能被當前塊所捕捉, <wbr>
  •  <wbr>
  •   <wbr><wbr>
  •  <wbr>
  • --4、使用異常函式: <wbr>
  • Oracle內建函式sqlcode和sqlerrm主要用在others處理器中,分別用來返回oracle的錯誤程式碼和錯誤訊息。 <wbr>
  • 一般情況下sqlcode返回負數標識的oracle錯誤程式碼,除非錯誤 <wbr>
  • 為‘ora-01403:no data found’,此時對應的sqlcode為+100, <wbr>
  • 對於使用者自定義的異常,sqlcode返回+1,如果沒有異常被觸發,sqlcode返回0。 <wbr>
  •   Begin <wbr><wbr>
  •   Exception <wbr><wbr>
  •    When  others<wbr> then <wbr><wbr><wbr>
  •       Dbms_output.put_line(sqlcode||sqlerrm(sqlcode)); <wbr><wbr><wbr><wbr><wbr><wbr>
  •   End<wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •  <wbr>
  •   <wbr><wbr>
  •  <wbr>
  •  <wbr>
  • Oracle過程raise_application_error用於在plsql應用程式中自定義錯誤訊息。 <wbr>
  • 注意該過程只能在資料庫端的子程式(過程、函式、包、觸發器)中使用,而不能在匿名塊和客戶端的子程式中使用。 <wbr>
  • 語法為raise_application_error(error_number,message[,[true|false]]); <wbr>
  • 其中 <wbr>
  •  <wbr>
  • error_number用於定義錯誤號,該錯誤號必須在-20000到-20999之間的負整數; <wbr>
  • message用於指定錯誤訊息,並且該訊息的長度不 <wbr>
  • 能超過2048位元組; <wbr>
  • 第三個引數如果為true,則該錯誤會被放在先前錯誤堆疊中,如果為false(預設值)則會替代先前所有錯誤。 <wbr>
  •   IF product_not_found THEN <wbr><wbr>
  •                RAISE_APPLICATION_ERROR(-20123,'Invald product code' <wbr> TRUE); <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  •   END IF; <wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •  <wbr>
  •   <wbr><wbr>
  •  <wbr>
  •  <wbr>
  • --5、plsql編譯警告: <wbr>
  • plsql警告可以分為四類: <wbr>
  • severe:用於 <wbr>
  • 檢查可能出現的不可預料或者錯誤結果,例如引數的別名問題; <wbr>
  • performance:用於檢查可能引起的效能問題,例如執行insert操作時為 number列提供了varchar2型別資料; <wbr>
  • informational:用於檢查子程式中的死程式碼; <wbr>
  • all:用於檢查所有警告。 <wbr>
  •  <wbr>
  •  <wbr>
  • 為了資料庫可以在編 <wbr>
  • 譯plsql子程式時發出警告資訊,需要設定初始化引數plsql_warnings。這個引數不僅可以在系統級或者會話級設定,也可以在alter procedure命令中設定。 <wbr>
  •   Alter {system|session|procedure <wbr><wbr><wbr>
  •   set plsql_warnings= <wbr><wbr>
  •    <wbr><wbr><wbr>
  • ’{enable|disable:{all |performance|severe|informational}}’; <wbr>
  •     <wbr><wbr><wbr><wbr>
  •  <wbr>
  •  <wbr>
  • 為了檢查是否存在對應警告資訊,必須先啟用警告檢查,然後重新編譯子程式, <wbr>
  • 最後使用show errors命令顯示警告錯誤。 <wbr>
  •   create or <wbr> replace procedure  my_test <wbr><wbr><wbr>
  •   is <wbr><wbr>
  •   begin <wbr><wbr>
  •    if  1=0 then <wbr><wbr><wbr><wbr>
  •       dbms_output.put_line('test'); <wbr><wbr><wbr><wbr><wbr><wbr>
  •    endif;  <wbr><wbr><wbr><wbr>
  •   end<wbr><wbr>
  •   SQL>  alter procedure  my_test compile plsql_warnings =<wbr> 'enable:all'<wbr><wbr><wbr>
  •    <wbr><wbr><wbr>
  •  <wbr>
  •   Procedure altered <wbr><wbr>
  •    SQL>  show errors; <wbr><wbr><wbr><wbr>
  •   Errors for <wbr> PROCEDURE SYS.MY_TEST: <wbr><wbr>
  •    LINE/COL ERROR <wbr><wbr><wbr>
  •   --------  -------------------------<wbr> <wbr><wbr>
  •   10/5      PLW-06002: 無法執行的程式碼 <wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  •     <wbr><wbr><wbr><wbr>
  •  <wbr>
  •  <wbr>
  • --6、定義Exception時要注意的一些事項 <wbr>
  • 當異常發生時,在塊的內部沒有該異常處理器時,控制將轉到或傳播到上一層塊的異常處理部分。 <wbr>
  • 沒有處理的異常將沿檢測異常呼叫程式傳播到外層,當異常被處理並解決或到達程式最外層傳播停止。在宣告部分丟擲的異常將控制轉到上一層的異常部分。 <wbr>
  •  <wbr>
  •  <wbr>
  • 使用者必須在獨立的WHEN子串中為每個異常設計異常處理程式碼,WHEN OTHERS子串必須放置在最後面作為預設處理器處理沒有顯式處理的異常。當異常發生時,控制轉到異常部分,ORACLE查詢當前異常相應的WHEN..THEN語句,捕捉異常,THEN之後的程式碼被執行,如果錯誤陷阱程式碼只是退出相應的巢狀塊,那麼程式將繼續執行內部塊END後面的語句。如果沒有找到相應的異常陷阱,那麼將執行WHEN OTHERS。在異常部分WHEN 子串沒有數量限制。 <wbr>
  •   EXCEPTION <wbr><wbr>
  •    <wbr><wbr><wbr>
  • WHEN inventory_too_low THEN <wbr>
  •    <wbr><wbr><wbr>
  •       ...... <wbr><wbr><wbr><wbr><wbr><wbr>
  •    <wbr><wbr><wbr>
  • WHEN discontinued_item THEN <wbr>
  •    <wbr><wbr><wbr>
  •       ...... <wbr><wbr><wbr><wbr><wbr><wbr>
  •    <wbr><wbr><wbr>
  • WHEN zero_divide THEN <wbr>
  •    <wbr><wbr><wbr>
  •       ...... <wbr><wbr><wbr><wbr><wbr><wbr>
  •    <wbr><wbr><wbr>
  • WHEN OTHERS THEN <wbr>
  •    <wbr><wbr><wbr>
  •       ......  <wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  •  <wbr>
  •  <wbr>
  • oracle預定義的異常列表 <wbr>
  • 2008-10-30 16:06 <wbr>
  • 命名的系統異常         產生原因  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • ACCESS_INTO_NULL         未定義物件  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • CASE_NOT_FOUND         CASE 中若未包含相應的 WHEN ,並且沒有設定 ELSE 時  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • COLLECTION_IS_NULL         集合元素未初始化  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • CURSER_ALREADY_OPEN         遊標已經開啟  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • DUP_VAL_ON_INDEX         唯一索引對應的列上有重複的值  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • INVALID_CURSOR         在不合法的遊標上進行操作  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • INVALID_NUMBER         內嵌的 SQL 語句不能將字元轉換為數字  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • NO_DATA_FOUND         使用 select into 未返回行,或應用索引表未初始化的元素時  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • TOO_MANY_ROWS         執行 select into 時,結果集超過一行  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • ZERO_DIVIDE         除數為 0  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • SUBSCRIPT_BEYOND_COUNT         元素下標超過巢狀表或 VARRAY 的最大值  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • SUBSCRIPT_OUTSIDE_LIMIT         使用巢狀表或 VARRAY 時,將下標指定為負數  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • VALUE_ERROR         賦值時,變數長度不足以容納實際資料  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • LOGIN_DENIED         PL/SQL 應用程式連線到 oracle 資料庫時,提供了不正確的使用者名稱或密碼  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • NOT_LOGGED_ON         PL/SQL 應用程式在沒有連線 oralce 資料庫的情況下訪問資料  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • PROGRAM_ERROR         PL/SQL 內部問題,可能需要重灌資料字典& pl./SQL 系統包  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • ROWTYPE_MISMATCH         宿主遊標變數與 PL/SQL 遊標變數的返回型別不相容  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • SELF_IS_NULL         使用物件型別時,在 null 物件上呼叫物件方法  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • STORAGE_ERROR         執行 PL/SQL 時,超出記憶體空間  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • SYS_INVALID_ID         無效的 ROWID 字串  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  • TIMEOUT_ON_RESOURCE         Oracle 在等待資源時超時 <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  •  <wbr>
  • ============================================================= <wbr>
  •  <wbr>
  • BEGIN <wbr>
  • 《PL/SQL塊》; <wbr>
  • Exception <wbr>
  • when no_data_found then --沒有找到資料 <wbr>
  • 《響應命令》; <wbr>
  • when too_many_rows then --返回多行,隱式游標每次只能檢索一行資料 <wbr>
  • 《響應命令》; <wbr>
  • when invalid_number then --字元向數字轉換失敗 <wbr>
  • 《響應命令》; <wbr>
  • when zero_divide then --被零除 <wbr>
  • 《響應命令》; <wbr>
  • when dup_val_on_index then --向唯一索引中插入重複資料 <wbr>
  • 《響應命令》; <wbr>
  • when invalid_cursor then --非法遊標操作 <wbr>
  • 《響應命令》; <wbr>
  • when value_error then --數字的,資料轉換,截字串或強制性的錯誤 <wbr>
  • 《響應命令》; <wbr>
  • when others then --發生其它任何錯誤 <wbr>
  • null; --選擇一:什麼也不做,就當錯誤沒發生 <wbr>
  • raise form_trigger_failure; --選擇二:掛起當前程式 <wbr>
  • END<wbr>
  •  <wbr>
  •  <wbr>
  • 常用預定義例外 <wbr>
  • EXCEPTION <wbr>
  • WHEN CURSOR_ALREADY_OPEN THEN -- ORA-06511 SQLCODE = -6511 遊標已經開啟 <wbr>
  • ..WHEN DUP_VAL_ON_INDEX THEN -- ORA-00001 SQLCODE = -1 向唯一索引中插入重複資料 <wbr>
  • ..WHEN INVALID_CURSOR THEN -- ORA-01001 SQLCODE = -1001 非法遊標操作 <wbr>
  • ..WHEN INVALID_NUMBER THEN -- ORA-01722 SQLCODE = -1722 字元向數字轉換失敗 <wbr>
  • ..WHEN LOGIN_DENIED THEN -- ORA-01017 SQLCODE = -1017  <wbr>
  •  <wbr>
  • ..WHEN NO_DATA_FOUND THEN -- ORA-01403 SQLCODE = +100 沒有找到資料 <wbr>
  • ..WHEN NOT_LOGGED_ON THEN -- ORA-01012 SQLCODE = -1012  <wbr>
  • ..WHEN PROGRAM_ERROR THEN -- ORA-06501 SQLCODE = -6501 程式錯誤 <wbr>
  • ..WHEN STORAGE_ERROR THEN -- ORA-06500 SQLCODE = -6500 <wbr>
  • ..WHEN TIMEOUT_ON_RESOURCE THEN -- ORA-00051 SQLCODE = -51 <wbr>
  •  <wbr>
  • ..WHEN TOO_MANY_ROWS THEN -- ORA-01422 SQLCODE = -1422 返回多行 <wbr>
  • ..WHEN TRANSACTION_BACKED_OUT THEN -- ORA-00061 SQLCODE = -61 <wbr>
  •  <wbr>
  • ..WHEN VALUE_ERROR THEN -- ORA-06502 SQLCODE = -6502 數值轉換錯誤 <wbr>
  • ..WHEN ZERO_DIVIDE THEN -- ORA-01476 SQLCODE = -1476 被零除 <wbr>
  • ..WHEN OTHERS THEN -- 其它任何錯誤的處理 <wbr>
  • ..END <wbr><wbr>

     <wbr>

    ORA-00001: 違反唯一約束條件 (.)
    ORA-00017: 請求會話以設定跟蹤事件
    ORA-00018: 超出最大會話數
    ORA-00019: 超出最大會話許可數
    ORA-00020: 超出最大程式數 ()
    ORA-00021: 會話附屬於其它某些程式;無法轉換會話
    ORA-00022: 無效的會話 ID;訪問被拒絕
    ORA-00023: 會話引用程式私用記憶體;無法分離會話
    ORA-00024: 單一程式模式下不允許從多個程式註冊
    ORA-00025: 無法分配 
    ORA-00026: 丟失或無效的會話 ID
    ORA-00027: 無法刪去當前會話
    ORA-00028: 您的會話己被刪去
    ORA-00029: 會話不是使用者會話
    ORA-00030: 使用者會話 ID 不存在。
    ORA-00031: 標記要刪去的會話
    ORA-00032: 無效的會話移植口令
    ORA-00033: 當前的會話具有空的移植口令
    ORA-00034: 無法在當前 PL/SQL 會話中 
    ORA-00035: LICENSE_MAX_USERS 不能小於當前使用者數
    ORA-00036: 超過遞迴 SQL () 級的最大值
    ORA-00037: 無法轉換到屬於不同伺服器組的會話
    ORA-00038: 無法建立會話: 伺服器組屬於其它使用者
    ORA-00050: 獲取入隊時作業系統出錯
    ORA-00051: 等待資源超時
    ORA-00052: 超出最大入隊資源數 ()
    ORA-00053: 超出最大入隊數
    ORA-00054: 資源正忙,要求指定 NOWAIT
    ORA-00055: 超出 DML 鎖的最大數
    ORA-00056: 物件 '.' 上的 DDL 鎖以不相容模式掛起
    ORA-00057: 超出臨時表鎖的最大數
    ORA-00058: DB_BLOCK_SIZE 必須為才可安裝此資料庫 (非 )
    ORA-00059: 超出 DB_FILES 的最大值
    ORA-00060: 等待資源時檢測到死鎖
    ORA-00061: 另一個例程設定了不同的 DML_LOCKS
    ORA-00062: 無法獲得 DML 全表鎖定;DML_LOCKS 為 0
    ORA-00063: 超出 LOG_FILES 的最大數
    ORA-00064: 物件過大以至無法分配在此 O/S (,)
    ORA-00065: FIXED_DATE 的初始化失敗
    ORA-00066: LOG_FILES 為  但需要成為  才可相容
    ORA-00067: 值  對引數  無效;至少必須為 
    ORA-00068: 值  對引數  無效,必須在  和  之間
    ORA-00069: 無法獲得鎖定 -- 禁用了表鎖定
    ORA-00070: 命令無效
    ORA-00071: 程式號必須介於 1 和  之間
    ORA-00072: 程式""不活動
    ORA-00073: 命令  介於  和  個引數之間時使用
    ORA-00074: 未指定程式
    ORA-00075: 在此例程未找到程式 ""
    ORA-00076: 未找到轉儲 
    ORA-00077: 轉儲  無效
    ORA-00078: 無法按名稱轉儲變數
    ORA-00079: 未找到變數 
    ORA-00080: 層次  指定的全域性區域無效
    ORA-00081: 地址範圍 [,) 不可讀
    ORA-00082:  的記憶體大小不在有效集合 [1], [2], [4] 之內
    ORA-00083: 警告: 可能損壞對映的 SGA 
    ORA-00084: 全域性區域必須為 PGA, SGA 或 UGA
    ORA-00085: 當前呼叫不存在
    ORA-00086: 使用者呼叫不存在
    ORA-00087: 命令無法在遠端例程上執行
    ORA-00088: 共享伺服器無法執行命令
    ORA-00089: ORADEBUG 命令中無效的例程號
    ORA-00090: 未能將記憶體分配給群集資料庫 ORADEBUG 命令
    ORA-00091: LARGE_POOL_SIZE 至少必須為 
    ORA-00092: LARGE_POOL_SIZE 必須大於 LARGE_POOL_MIN_ALLOC
    ORA-00093:  必須介於  和  之間
    ORA-00094:  要求整數值
    ORA-00096: 值  對引數  無效,它必須來自  之間
    ORA-00097: 使用 Oracle SQL 特性不在 SQL92  級中
    ORA-00099: 等待資源時發生超時,可能是 PDML 死鎖所致
    ORA-00100: 未找到資料
    ORA-00101: 系統引數 DISPATCHERS 的說明無效
    ORA-00102: 排程程式無法使用網路協議 
    ORA-00103: 無效的網路協議;供排程程式備用
    ORA-00104: 檢測到死鎖;全部公用伺服器已鎖定等待資源
    ORA-00105: 未配置網路協議  的排程機制
    ORA-00106: 無法在連線到排程程式時啟動/關閉資料庫
    ORA-00107: 無法連線到 ORACLE 監聽器程式
    ORA-00108: 無法設定排程程式以同步進行連線
    ORA-00111: 由於伺服器數目限制在 , 所以沒有啟動所有伺服器
    ORA-00112: 僅能建立多達  (最多指定) 個排程程式
    ORA-00113: 協議名  過長
    ORA-00114: 缺少系統引數 SERVICE_NAMES 的值
    ORA-00115: 連線被拒絕;排程程式連線表已滿
    ORA-00116: SERVICE_NAMES 名過長
    ORA-00117: 系統引數 SERVICE_NAMES 的值超出範圍
    ORA-00118: 系統引數 DISPATCHERS 的值超出範圍
    ORA-00119: 系統引數  的說明無效
    ORA-00120: 未啟用或安裝排程機制
    ORA-00121: 在缺少 DISPATCHERS 的情況下指定了 SHARED_SERVERS
    ORA-00122: 無法初始化網路配置
    ORA-00123: 空閒公用伺服器終止
    ORA-00124: 在缺少 MAX_SHARED_SERVERS 的情況下指定了 DISPATCHERS
    ORA-00125: 連線被拒絕;無效的簡報
    ORA-00126: 連線被拒絕;無效的重複
    ORA-00127: 排程程式  不存在
    ORA-00128: 此命令需要排程程式名
    ORA-00129: 監聽程式地址驗證失敗 ''
    ORA-00130: 監聽程式地址 '' 無效
    ORA-00131: 網路協議不支援註冊 ''
    ORA-00132: 語法錯誤或無法解析的網路名稱 ''
    ORA-00150: 重複的事務處理 ID
    ORA-00151: 無效的事務處理 ID
    ORA-00152: 當前會話與請求的會話不匹配
    ORA-00153: XA 庫中的內部錯誤
    ORA-00154: 事務處理監視器中的協議錯誤
    ORA-00155: 無法在全域性事務處理之外執行工作
    ORA-00160: 全域性事務處理長度  超出了最大值 ()
    ORA-00161: 事務處理的分支長度  非法 (允許的最大長度為 )
    ORA-00162: 外部 dbid 的長度  超出了最大值 ()
    ORA-00163: 內部資料庫名長度  超出了最大值 ()
    ORA-00164: 在分散式事務處理中不允許獨立的事務處理
    ORA-00165: 不允許對遠端操作進行可移植分散式自治轉換
    ORA-00200: 無法建立控制檔案
    ORA-00201: 控制檔案版本  與 ORACLE 版本  不相容
    ORA-00202: 控制檔案: ''
    ORA-00203: 使用錯誤的控制檔案
    ORA-00204: 讀控制檔案時出錯 (塊 ,# 塊 )
    ORA-00205: 標識控制檔案出錯,有關詳情,請檢查警告日誌
    ORA-00206: 寫控制檔案時出錯 (塊 ,# 塊 )
    ORA-00207: 控制檔案不能用於同一資料庫
    ORA-00208: 控制檔案的名稱數超出限制 
    ORA-00209: 控制檔案塊大小不匹配,有關詳情,請檢查警告日誌
    ORA-00210: 無法開啟指定的控制檔案
    ORA-00211: 控制檔案與先前的控制檔案不匹配
    ORA-00212: 塊大小  低於要求的最小大小 ( 位元組)
    ORA-00213: 不能重新使用控制檔案;原檔案大小為 ,還需 
    ORA-00214: 控制檔案 '' 版本  與檔案 '' 版本  不一致
    ORA-00215: 必須至少存在一個控制檔案
    ORA-00216: 無法重新調整從 8.0.2 移植的控制檔案大小
    ORA-00217: 從 9.0.1 進行移植無法重新調整控制檔案的大小
    ORA-00218: 控制檔案的塊大小  與 DB_BLOCK_SIZE () 不匹配
    ORA-00219: 要求的控制檔案大小  超出了允許的最大值 
    ORA-00220: 第一個例程未安裝控制檔案,有關詳情,請檢查警告日誌
    ORA-00221: 寫入控制檔案出錯
    ORA-00222: 操作將重新使用當前已安裝控制檔案的名稱
    ORA-00223: 轉換檔案無效或版本不正確
    ORA-00224: 控制檔案重設大小嚐試使用非法記錄型別 ()
    ORA-00225: 控制檔案的預期大小  與實際大小  不同
    ORA-00226: 備用控制檔案開啟時不允許進行操作
    ORA-00227: 控制檔案中檢測到損壞的塊: (塊 ,# 塊 )
    ORA-00228: 備用控制檔名長度超出了最大長度 
    ORA-00229: 操作不允許: 已掛起快照控制檔案入隊
    ORA-00230: 操作不允許: 無法使用快照控制檔案入隊
    ORA-00231: 快照控制檔案未命名
    ORA-00232: 快照控制檔案不存在, 已損壞或無法讀取
    ORA-00233: 控制檔案副本已損壞或無法讀取
    ORA-00234: 標識或開啟快照或複製控制檔案時出錯
    ORA-00235: 控制檔案固定表因併發更新而不一致
    ORA-00236: 快照操作不允許: 掛上的控制檔案為備份檔案
    ORA-00237: 快照操作不允許: 控制檔案新近建立
    ORA-00238: 操作將重用屬於資料庫一部分的檔名
    ORA-00250: 未啟動存檔器
    ORA-00251: LOG_ARCHIVE_DUPLEX_DEST 不能是與字串  相同的目的地
    ORA-00252: 日誌  線上程  上為空,無法存檔
    ORA-00253: 字元限制在  以內,歸檔目的字串  超出此限制
    ORA-00254: 存檔控制字串 '' 時出錯
    ORA-00255: 存檔日誌  (執行緒 , 序列 # ) 時出錯
    ORA-00256: 無法翻譯歸檔目的字串 
    ORA-00257: 存檔器錯誤。在釋放之前僅限於內部連線
    ORA-00258: NOARCHIVELOG 模式下的人工存檔必須標識日誌
    ORA-00259: 日誌  (開啟執行緒 ) 為當前日誌,無法存檔
    ORA-00260: 無法找到聯機日誌序列  (執行緒 )
    ORA-00261: 正在存檔或修改日誌  (執行緒 )
    ORA-00262: 當前日誌  (關閉執行緒 ) 無法切換
    ORA-00263: 執行緒  沒有需要存檔的記錄
    ORA-00264: 不要求恢復
    ORA-00265: 要求例程恢復,無法設定 ARCHIVELOG 模式
    ORA-00266: 需要存檔日誌檔名
    ORA-00267: 無需存檔日誌檔名
    ORA-00268: 指定的日誌檔案不存在 ''
    ORA-00269: 指定的日誌檔案為執行緒  的一部分 (非 )
    ORA-00270: 建立存檔日誌  時出錯
    ORA-00271: 沒有需要存檔的日誌
    ORA-00272: 寫存檔日誌  時出錯
    ORA-00273: 未記錄的直接載入資料的介質恢復
    ORA-00274: 非法恢復選項 
    ORA-00275: 已經開始介質恢復
    ORA-00276: CHANGE 關鍵字已指定但未給出更改編號
    ORA-00277: UNTIL 恢復標誌  的非法選項
    ORA-00278: 此恢復不再需要日誌檔案 ''
    ORA-00279: 更改  (在  生成) 對於執行緒  是必需的
    ORA-00280: 更改  對於執行緒  是按序列 #  進行的
    ORA-00281: 不能使用排程程式執行介質恢復
    ORA-00282: UPI  呼叫不被支援,請使用 ALTER DATABASE RECOVER
    ORA-00283: 恢復會話因錯誤而取消
    ORA-00284: 恢復會話仍在進行
    ORA-00285: TIME 未作為字串常數給出
    ORA-00286: 無可用成員,或成員無有效資料
    ORA-00287: 未找到指定的更改編號  (線上程  中)
    ORA-00288: 要繼續恢復,請鍵入 ALTER DATABASE RECOVER CONTINUE
    ORA-00289: 建議: 
    ORA-00290: 作業系統出現存檔錯誤。請參閱下面的錯誤
    ORA-00291: PARALLEL 選項要求數字值
    ORA-00292: 未安裝並行恢復功能
    ORA-00293: 控制檔案與重做日誌不同步
    ORA-00294: 無效的存檔日誌格式標識 ''
    ORA-00295: 資料檔案號  無效,必須介於 1 與  之間
    ORA-00296: 已超出 RECOVER DATAFILE LIST 的最大檔案數 ()
    ORA-00297: 必須在 RECOVER DATAFILE START 之前指定 RECOVER DATAFILE LIST
    ORA-00298: 丟失或無效的 TIMEOUT 間隔
    ORA-00299: 必須在資料檔案  上使用檔案級介質恢復
    ORA-00300: 指定的重做日誌塊大小  非法 - 超出限制 
    ORA-00301: 新增日誌檔案 '' 時出錯 - 無法建立檔案
    ORA-00302: 日誌超出限制 
    ORA-00303: 無法處理多次中斷的重做
    ORA-00304: 請求的 INSTANCE_NUMBER 在使用中
    ORA-00305: 日誌  (執行緒 ) 不一致;屬於另一個資料庫
    ORA-00306: 此資料庫中的例程限制 
    ORA-00307: 請求的 INSTANCE_NUMBER 超出限制,最大為 
    ORA-00308: 無法開啟存檔日誌 ''
    ORA-00309: 日誌屬於錯誤的資料庫
    ORA-00310: 存檔日誌包含序列 ;要求序列 
    ORA-00311: 無法從存檔日誌讀取標題
    ORA-00312: 聯機日誌  執行緒 : ''
    ORA-00313: 無法開啟日誌組  (執行緒 ) 的成員
    ORA-00314: 日誌  (執行緒 ),預計序號  與  不匹配
    ORA-00315: 日誌  (執行緒 ),標題中的執行緒 #  錯誤
    ORA-00316: 日誌  (執行緒 ),標題中的型別  不是日誌檔案
    ORA-00317: 標題中的檔案型別  不是日誌檔案
    ORA-00318: 日誌  (執行緒 ),預計檔案大小  與  不匹配
    ORA-00319: 日誌  (執行緒 ) 具有錯誤的日誌重置狀態
    ORA-00320: 無法從日誌  (執行緒 ) 讀取檔案標題
    ORA-00321: 日誌  (執行緒 ),無法更新日誌檔案標題
    ORA-00322: 日誌  (執行緒 ) 不是當前副本
    ORA-00323: 執行緒  的當前日誌不可用而所有其它日誌均需要存檔
    ORA-00324: 日誌檔案 '' 的翻譯名 '' 太長, 字元超出  限制
    ORA-00325: 已歸檔執行緒  的日誌,標題中的執行緒 #  錯誤
    ORA-00326: 日誌在更改  開始,需要更早的更改 
    ORA-00327: 日誌  (執行緒 ),實際大小  小於需要的 
    ORA-00328: 歸檔日誌在更改  結束,需要稍後的更改 
    ORA-00329: 歸檔日誌在更改  開始,需要更改 
    ORA-00330: 歸檔日誌在更改  結束,需要更改 
    ORA-00331: 日誌版本  與 ORACLE 版本  不相容
    ORA-00332: 歸檔日誌過小 - 可能未完全歸檔
    ORA-00333: 重做日誌讀取塊  計數  出錯
    ORA-00334: 歸檔日誌: ''
    ORA-00335: 聯機日誌 : 沒有此編號的日誌,日誌不存在
    ORA-00336: 大小為  的日誌檔案塊數小於最小  塊數
    ORA-00337: 日誌檔案 '' 不存在且未指定大小
    ORA-00338: 日誌  (執行緒 ) 比控制檔案更新
    ORA-00339: 歸檔日誌未包含任何重做
    ORA-00340: 處理聯機日誌  (執行緒 ) 時出現 I/O 錯誤
    ORA-00341: 日誌  (執行緒 ),標題中的日誌 #  錯誤
    ORA-00342: 歸檔日誌在上一個 RESETLOGS 之前建立程式包
    ORA-00343: 錯誤過多,已關閉日誌成員
    ORA-00344: 無法重新建立聯機日誌 ''
    ORA-00345: 重做日誌寫入塊  計數  出錯
    ORA-00346: 日誌成員標記為 STALE
    ORA-00347: 日誌  (執行緒 ),預計塊大小  與  不匹配
    ORA-00348: 單一程式重做失敗;必須中止例程
    ORA-00349: 無法獲得 '' 的塊大小
    ORA-00350: 日誌  (執行緒 ) 中需要歸檔
    ORA-00351: recover-to 時間無效
    ORA-00352: 執行緒  的所有日誌均需要歸檔 - 無法啟用
    ORA-00353: 日誌損壞接近塊  更改  時間 
    ORA-00354: 損壞重做日誌塊標題
    ORA-00355: 更改編號無次序
    ORA-00356: 更改說明中的長度不一致
    ORA-00357: 日誌檔案指定了過多成員,最大為 
    ORA-00358: 指定了過多檔案成員,最大為 
    ORA-00359: 日誌檔案組  不存在
    ORA-00360: 非日誌檔案成員: 
    ORA-00361: 無法刪除最後一個日誌成員  (組 )
    ORA-00362: 組成組  中的有效日誌檔案要求輸入成員
    ORA-00363: 日誌不是歸檔版本
    ORA-00364: 無法將標題寫入新日誌成員
    ORA-00365: 指定日誌不是正確的下一個日誌
    ORA-00366: 日誌  (執行緒 ),檔案標題中的校驗和錯誤
    ORA-00367: 日誌檔案標題中的校驗和錯誤
    ORA-00368: 重做日誌塊中的校驗和錯誤
    ORA-00369: 執行緒  的當前日誌不可用且其它日誌已被清除
    ORA-00370: Rcbchange 操作過程中可能出現死鎖
    ORA-00371: 共享池記憶體不足
    ORA-00372: 此時無法修改檔案 
    ORA-00373: 聯機日誌版本  與 ORACLE 版本  不相容
    ORA-00374: 引數 db_block_size =  無效; 它必須是  的倍數, 範圍為 [..]
    ORA-00375: 無法獲得預設 db_block_size
    ORA-00376: 此時無法讀取檔案 
    ORA-00377: 檔案  的頻繁備份導致寫操作延遲
    ORA-00378: 無法按指定建立緩衝池
    ORA-00379: 緩衝池  中無法提供 K 塊大小的空閒緩衝區
    ORA-00380: 無法指定 db_k_cache_size, 因為 K 是標準塊大小
    ORA-00381: 無法將新引數和舊引數同時用於緩衝區快取記憶體的大小說明
    ORA-00382:  不是有效的塊大小, 有效範圍為 [..]
    ORA-00383: DEFAULT 快取記憶體的塊大小  不能減少至零
    ORA-00384: 沒有足夠的記憶體來增加快取記憶體的大小
    ORA-00385: cannot enable Very Large Memory with new buffer cache parameters
    ORA-00390: 日誌  (執行緒 ) 正被清除,無法成為當前日誌
    ORA-00391: 所有執行緒必須同時轉換為新的日誌格式
    ORA-00392: 日誌  (執行緒 ) 正被清除,不允許操作
    ORA-00393: 離線資料檔案的恢復需要日誌  (執行緒 )
    ORA-00394: 在嘗試存檔時重新使用聯機日誌
    ORA-00395: '克隆' 資料庫的聯機日誌必須重新命名
    ORA-00396: 錯誤  需要退回到單次遍歷恢復
    ORA-00397: 對於檔案  (塊 ), 檢測到寫入丟失情況
    ORA-00398: 由於重新配置而中止了執行緒恢復
    ORA-00399: 重做日誌中的更改說明已損壞
    ORA-00400: 無效的版本值  (對於引數 )
    ORA-00401: 此版本不支援引數  的值
    ORA-00402: 版本  的資料庫更改無法用於版本 
    ORA-00403:  () 不同於其它例程 ()
    ORA-00404: 未找到轉換檔案: ''
    ORA-00405: 相容型別""
    ORA-00406: COMPATIBLE 引數需要為  或更大
    ORA-00407: 不允許從版本 . 到 . 滾動升級
    ORA-00408: 引數  設定為 TRUE
    ORA-00409: COMPATIBLE 必須是  或更高值才能使用 AUTO SEGMENT SPACE MANAGEMENT
    ORA-00436: 沒有 ORACLE 軟體使用權,請與 Oracle 公司聯絡獲得幫助
    ORA-00437: 沒有 ORACLE 軟體功能使用權,請與 Oracle 公司聯絡獲得幫助
    ORA-00438: 未安裝  選項
    ORA-00439: 未啟用特性: 
    ORA-00443: 背景程式 "" 未啟動
    ORA-00444: 背景程式 "" 啟動時失敗
    ORA-00445: 背景程式 "" 在  秒之後仍沒有啟動
    ORA-00446: 背景程式意外啟動
    ORA-00447: 背景程式出現致命錯誤
    ORA-00448: 背景程式正常結束
    ORA-00449: 背景程式 '' 因錯誤  異常終止
    ORA-00470: LGWR 程式因錯誤而終止
    ORA-00471: DBWR 程式因錯誤而終止
    ORA-00472: PMON 程式因錯誤而終止
    ORA-00473: ARCH 程式因錯誤而終止
    ORA-00474: SMON 程式因錯誤而終止
    ORA-00475: TRWR 程式因錯誤而終止
    ORA-00476: RECO 程式因錯誤而終止
    ORA-00477: SNP* 程式因錯誤而終止
    ORA-00478: SMON 程式由於  錯誤終止
    ORA-00480: LCK* 程式因錯誤而終止
    ORA-00481: LMON 程式因錯誤而終止
    ORA-00482: LMD* 程式因錯誤而終止
    ORA-00483: 關閉程式過程中異常終止
    ORA-00484: LMS* 程式因錯誤而終止
    ORA-00485: DIAG 程式由於  錯誤終止
    ORA-00486: 功能不可用
    ORA-00568: 超出中斷處理程式的最大數
    ORA-00574: osndnt: $CANCEL 失敗 (中斷)
    ORA-00575: osndnt: $QIO 失敗 (傳送 out-of-band 中斷)
    ORA-00576: 帶內中斷協議錯誤
    ORA-00577: 帶外中斷協議錯誤
    ORA-00578: 重置協議錯誤
    ORA-00579: osndnt: 伺服器收到連線請求格式不正確
    ORA-00580: 協議版本不匹配
    ORA-00581: osndnt: 無法分配上下文區域
    ORA-00582: osndnt: 無法撤消分配上下文區域
    ORA-00583: osndnt: $TRNLOG 失敗
    ORA-00584: 無法關閉連線
    ORA-00585: 主機名稱格式錯誤
    ORA-00586: osndnt: LIB$ASN_WTH_MBX 失敗
    ORA-00587: 無法連線到遠端主機
    ORA-00588: 來自主機的資訊過短
    ORA-00589: 來自主機的資訊資料長度錯誤
    ORA-00590: 來自主機的資訊型別錯誤
    ORA-00591: 寫入的位元組數錯誤
    ORA-00592: osndnt: $QIO 失敗 (郵箱佇列)
    ORA-00593: osndnt: $DASSGN 失敗 (網路裝置)
    ORA-00594: osndnt: $DASSGN 失敗 (郵箱)
    ORA-00595: osndnt: $QIO 失敗 (接收)
    ORA-00596: osndnt: $QIO 失敗 (傳送)
    ORA-00597: osndnt: $QIO 失敗 (郵箱佇列)
    ORA-00598: osndnt: $QIO IO 失敗 (郵箱讀取)
    ORA-00600: 內部錯誤程式碼,引數: [], [], [], [], [], [], [], []
    ORA-00601: 清除鎖定衝突
    ORA-00602: 內部程式設計異常錯誤
    ORA-00603: ORACLE 伺服器會話因致命錯誤而終止
    ORA-00604: 遞迴 SQL 層  出現錯誤
    ORA-00606: 內部錯誤程式碼
    ORA-00607: 當更改資料塊時出現內部錯誤
    ORA-00701: 無法改變熱啟動資料庫所需的物件
    ORA-00702: 載入程式版本 '' 與版本 '' 不一致
    ORA-00703: 超出行快取記憶體例程鎖的最大數
    ORA-00704: 載入程式程式失敗
    ORA-00705: 啟動過程中的狀態不一致;請在關閉例程後重新啟動
    ORA-00706: 更改檔案 '' 的格式時出錯
    ORA-00816: 錯誤資訊無法轉換
    ORA-00900: 無效 SQL 語句
    ORA-00901: 無效 CREATE 命令
    ORA-00902: 無效資料型別
    ORA-00903: 表名無效
    ORA-00904: : 無效的識別符號
    ORA-00905: 缺少關鍵字
    ORA-00906: 缺少左括號
    ORA-00907: 缺少右括號
    ORA-00908: 缺少 NULL 關鍵字
    ORA-00909: 引數個數無效
    ORA-00910: 指定的長度對於資料型別而言過長
    ORA-00911: 無效字元
    ORA-00913: 值過多
    ORA-00914: 缺少 ADD 關鍵字
    ORA-00915: 當前不允許網路訪問字典表
    ORA-00917: 缺少逗號
    ORA-00918: 未明確定義列
    ORA-00919: 無效函式
    ORA-00920: 無效的關係運算子
    ORA-00921: 未預期的 SQL 命令結尾
    ORA-00922: 缺少或無效選項
    ORA-00923: 未找到預期 FROM 關鍵字
    ORA-00924: 缺少 BY 關鍵字
    ORA-00925: 缺失 INTO 關鍵字
    ORA-00926: 缺少 VALUES 關鍵字
    ORA-00927: 缺少等號
    ORA-00928: 缺少 SELECT 關鍵字
    ORA-00929: 缺少句號
    ORA-00930: 缺少星號
    ORA-00931: 缺少標識
    ORA-00932: 不一致的資料型別: 要求  得到的卻是 
    ORA-00933: SQL 命令未正確結束
    ORA-00934: 此處不允許使用分組函式
    ORA-00935: 分組函式的巢狀太深
    ORA-00936: 缺少表示式
    ORA-00937: 非單組分組函式
    ORA-00938: 函式沒有足夠的引數
    ORA-00939: 函式的引數過多
    ORA-00940: 無效的 ALTER 命令
    ORA-00941: 群集名缺少
    ORA-00942: 表或檢視不存在
    ORA-00943: 群集不存在
    ORA-00944: 沒有足夠的聚簇列數
    ORA-00945: 指定的聚簇列不存在
    ORA-00946: 缺少 TO 關鍵字
    ORA-00947: 沒有足夠的值
    ORA-00948: 不再支援 ALTER CLUSTER 語句
    ORA-00949: 非法引用遠端資料庫
    ORA-00950: 無效 DROP 選項
    ORA-00951: 群集非空
    ORA-00952: 缺少 GROUP 關鍵字
    ORA-00953: 缺少或無效索引名
    ORA-00954: 缺少 IDENTIFIED 關鍵字
    ORA-00955: 名稱已由現有物件使用
    ORA-00956: 缺少或無效審計選項
    ORA-00957: 列名重複
    ORA-00958: 缺少 CHECK 關鍵字
    ORA-00959: 表空間''不存在
    ORA-00960: 選擇列表中的命名含糊
    ORA-00961: 錯誤的日期/間隔值
    ORA-00962: group-by / order-by 表示式過多
    ORA-00963: 不支援的間隔型別
    ORA-00964: 表名不在 FROM 列表中
    ORA-00965: 列別名中不允許'*'
    ORA-00966: 缺少 TABLE 關鍵字
    ORA-00967: 缺少 WHERE 關鍵字
    ORA-00968: 缺少 INDEX 關鍵字
    ORA-00969: 缺少 ON 關鍵字
    ORA-00970: 缺少 WITH 關鍵字
    ORA-00971: 缺少 SET 關鍵字
    ORA-00972: 標識過長
    ORA-00973: 無效的行數估計
    ORA-00974: 無效 PCTFREE 值 (百分比)
    ORA-00975: 不允許日期 + 日期
    ORA-00976: 此處不允許為 LEVEL, PRIOR 或 ROWNUM
    ORA-00977: 重複的審計選項
    ORA-00978: 巢狀分組函式沒有 GROUT BY
    ORA-00979: 不是 GROUP BY 表示式
    ORA-00980: 同義詞轉換不再有效
    ORA-00981: 不能將表和系統審計選項混在一起
    ORA-00982: 缺少加號
    ORA-00984: 列在此處不允許
    ORA-00985: 無效的程式名
    ORA-00986: 缺少或無效組名
    ORA-00987: 缺少或無效使用者名稱
    ORA-00988: 缺少或無效口令
    ORA-00989: 給出的使用者名稱口令過多
    ORA-00990: 缺少或無效許可權
    ORA-00991: 過程僅有 MAC 許可權
    ORA-00992: REVOKE 命令格式無效
    ORA-00993: 缺少 GRANT 關鍵字
    ORA-00994: 缺少 OPTION 關鍵字
    ORA-00995: 缺少或無效同義詞標識
    ORA-00996: 連線運算子是 || 而不是 |
    ORA-00997: 非法使用 LONG 資料型別
    ORA-00998: 必須使用列別名命名此表示式
    ORA-00999: 無效的檢視名
    ORA-01000: 超出開啟遊標的最大數
    ORA-01001: 無效的遊標
    ORA-01002: 讀取違反順序
    ORA-01003: 語句未進行語法分析
    ORA-01004: 不支援預設使用者名稱特性;登入被拒絕
    ORA-01005: 未給出口令;登入被拒絕
    ORA-01006: 賦值變數不存在
    ORA-01007: 選擇列表中沒有變數
    ORA-01008: 並非所有變數都已關聯
    ORA-01009: 缺少法定引數
    ORA-01010: 無效的 OCI 操作
    ORA-01011: 在與第 6 版伺服器會話時不能使用第 7 版相容模式
    ORA-01012: 沒有登入
    ORA-01013: 使用者請求取消當前的操作
    ORA-01014: ORACLE 正在關閉過程中
    ORA-01015: 迴圈登入請求
    ORA-01016: 此函式僅可以在讀取後呼叫
    ORA-01017: 無效的使用者名稱/口令;拒絕登入
    ORA-01018: 列不具有 LONG 資料型別
    ORA-01019: 無法在使用者方分配記憶體
    ORA-01020: 未知的上下文狀態
    ORA-01021: 指定的上下文大小無效
    ORA-01022: 此配置中不支援資料庫操作
    ORA-01023: 未找到遊標上下文 (無效的遊標編號)
    ORA-01024: OCI 呼叫中的資料型別無效
    ORA-01025: UPI 引數超出範圍
    ORA-01026: 賦值列表中存在多個大小 > 4000 的緩衝區
    ORA-01027: 在資料定義操作中不允許對變數賦值
    ORA-01028: 內部雙工錯誤
    ORA-01029: 內部雙工錯誤
    ORA-01030: SELECT ...INTO 變數不存在
    ORA-01031: 許可權不足
    ORA-01032: 沒有這樣的使用者標識
    ORA-01033: ORACLE 正在初始化或關閉過程中
    ORA-01034: ORACLE 不可用
    ORA-01035: ORACLE 只允許具有 RESTRICTED SESSION 許可權的使用者使用
    ORA-01036: 非法的變數名/編號
    ORA-01037: 超出最大遊標記憶體
    ORA-01038: 無法寫入資料庫檔案版本  (使用 ORACLE 版本 )
    ORA-01039: 檢視基本物件的許可權不足
    ORA-01040: 口令中的字元無效;登入被拒絕
    ORA-01041: 內部錯誤,hostdef 副檔名不存在
    ORA-01042: 不允許使用開啟遊標分離會話
    ORA-01043: 使用者方記憶體損壞 [], [], [], []
    ORA-01044: 緩衝區大小  (與變數關聯) 超出了最大限制 
    ORA-01045: 使用者  沒有 CREATE SESSION 許可權;登入被拒絕
    ORA-01046: 無法獲得擴充套件上下文區域的空間
    ORA-01047: 以上錯誤出現在 schema=, package=, procedure= 中
    ORA-01048: 給定的上下文中無法找到指定的過程
    ORA-01049: 流動 RPC 中不支援按名稱賦值
    ORA-01050: 無法獲得開啟上下文區域的空間
    ORA-01051: 延遲 rpc 緩衝區格式無效
    ORA-01052: 未指定所需的目的 LOG_ARCHIVE_DUPLEX_DEST
    ORA-01053: 無法讀取使用者儲存地址
    ORA-01054: 無法寫入使用者儲存地址
    ORA-01057: 使用者出口中引用的 block.field 無效或有歧義
    ORA-01058: 內部 New Upi 介面錯誤
    ORA-01059: 在賦值或執行之前進行語法分析
    ORA-01060: 不允許陣列賦值或執行
    ORA-01061: 無法使用第 7 版客戶應用程式啟動第 8 版伺服器
    ORA-01062: 無法分配定義緩衝區所需的記憶體
    ORA-01070: 伺服器使用 Oracle 的舊版本
    ORA-01071: 無法不啟動 ORACLE 而執行操作
    ORA-01072: 無法停止 ORACLE;因為 ORACLE 不在執行
    ORA-01073: 致命的連線錯誤: 不能識別的呼叫型別
    ORA-01074: 無法關閉 ORACLE;請首先在註冊會話中登出
    ORA-01075: 您現在已登入
    ORA-01076: 尚不支援每個程式的多次登入
    ORA-01077: 背景程式初始化失敗
    ORA-01078: 處理系統引數失敗
    ORA-01079: ORALCE 資料庫未正確建立,操作中止
    ORA-01080: 關閉 ORACLE 時出錯
    ORA-01081: 無法啟動已在執行的 ORACLE --- 請首先關閉
    ORA-01082: 'row_locking = always' 要求事務處理處理選項
    ORA-01083: 引數 "" 的值與其它例程式的相應引數值不一致。
    ORA-01084: OCI 呼叫中的引數無效
    ORA-01085: 延遲 rpc 到 ".." 之前的錯誤
    ORA-01086: 從未建立保留點 ''
    ORA-01087: 不能啟動 ORALCE --- 現在已登入
    ORA-01088: 不能在存在活動程式時關閉 ORACLE
    ORA-01089: 正在進行緊急關閉 - 不允許進行任何操作
    ORA-01090: 正在進行關閉 --- 不允許連線
    ORA-01091: 強行啟動出錯
    ORA-01092: ORACLE 例程終止。強行斷開連線
    ORA-01093: ALTER DATABASE CLOSE 僅允許在沒有連線會話時使用
    ORA-01094: ALTER DATABASE CLOSE 正在進行。不允許連線
    ORA-01095: DML 語句處理了零個行
    ORA-01096: 程式版本 () 與例程 () 不相容
    ORA-01097: 無法在事務處理過程中關閉 - 首先提交或返回
    ORA-01098: 在 Long Insert 過程中出現程式介面錯誤
    ORA-01099: 如果在單程式模式下啟動,則無法在 SHARED 模式下安裝資料庫
    ORA-01100: 資料庫已安裝
    ORA-01101: 要建立的資料庫當前正由其它例程安裝
    ORA-01102: 無法在 EXCLUSIVE 模式下安裝資料庫
    ORA-01103: 控制檔案中的資料庫名 '' 不是 ''
    ORA-01104: 控制檔案數 () 不等於 
    ORA-01105: 安裝與其它例程的安裝不相容
    ORA-01106: 必須在卸下之前關閉資料庫
    ORA-01107: 必須安裝資料庫才可以進行介質恢復
    ORA-01108: 檔案  正處於備份或介質恢復過程中
    ORA-01109: 資料庫未開啟
    ORA-01110: 資料檔案 : ''
    ORA-01111: 資料檔案  名稱未知 - 請重新命名以更正檔案
    ORA-01112: 未啟動介質恢復
    ORA-01113: 檔案  需要介質恢復
    ORA-01114: 將塊寫入檔案  時出現 IO 錯誤 (塊 # )
    ORA-01115: 從檔案  讀取塊時出現 IO 錯誤 (塊 # )
    ORA-01116: 開啟資料庫檔案時出錯
    ORA-01117: 對檔案 '' 新增非法塊大小: ;限制為 
    ORA-01118: 無法新增任何其它資料庫檔案: 超出限制 
    ORA-01119: 建立資料庫檔案 '' 時出錯
    ORA-01120: 無法刪除聯機資料庫檔案 
    ORA-01121: 無法重新命名資料庫檔案  - 檔案在使用中或在恢復中
    ORA-01122: 資料庫檔案  驗證失敗
    ORA-01123: 無法啟動聯機備份;未啟用介質恢復
    ORA-01124: 無法恢復資料檔案  - 檔案在使用中或在恢復中
    ORA-01125: 無法禁用介質恢復 - 檔案  設定了聯機備份
    ORA-01126: 對於此操作,資料庫必須以 EXCLUSIVE 模式安裝且未開啟
    ORA-01127: 資料庫名 '' 超出  個字元的限制
    ORA-01128: 無法啟動聯機備份 - 檔案  處於離線狀態
    ORA-01129: 使用者預設或臨時表空間不存在
    ORA-01130: 資料庫檔案版本  與 ORACLE 版本  不相容
    ORA-01131: DB_FILES 系統引數值  超出限制 
    ORA-01132: 資料庫檔名 '' 的長度超出  個字元的限制
    ORA-01133: 日誌檔名 '' 的長度超出  個字元的限制
    ORA-01134: 資料庫已由其它例程獨立安裝
    ORA-01135: DML/query 訪問的檔案  處於離線狀態
    ORA-01136: 檔案  ( 塊) 的指定大小小於  塊的原大小
    ORA-01137: 資料檔案  仍處於離線過程中
    ORA-01138: 資料庫必須在此例程中開啟或根本沒有開啟
    ORA-01139: RESETLOGS 選項僅在不完全資料庫恢復後有效
    ORA-01140: 無法結束聯機備份 - 所有檔案均處於離線狀態
    ORA-01141: 重新命名資料檔案  時出錯 - 未找到新檔案 ''
    ORA-01142: 無法結束聯機備份 - 沒有檔案在備份中
    ORA-01143: 不能禁用介質恢復 - 檔案  需要介質恢<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>

<!-- 正文結束 --&gt

相關文章