整理 oracle異常錯誤處理

5.1 異常處理概念程序員

5.1.1 預約義的異常處理sql

5.1.2 非預約義的異常處理數據庫

5.1.3 用戶自定義的異常處理編程

5.1.4  用戶定義的異常處理數組

5.2 異常錯誤傳播緩存

5.2.1 在執行部分引起異常錯誤服務器

5.2.2 在聲明部分引起異常錯誤網絡

5.3 異常錯誤處理編程session

5.4  在 PL/SQL 中使用 SQLCODE, SQLERRM異常處理函數併發

 


 

 

即便是寫得最好的PL/SQL程序也會遇到錯誤或未預料到的事件。一個優秀的程序都應該可以正確處理各類出錯狀況,並儘量從錯誤中恢復。任何ORACLE錯誤(報告爲ORA-xxxxx形式的Oracle錯誤號)、PL/SQL運行錯誤或用戶定義條件(不一寫是錯誤),均可以。固然了,PL/SQL編譯錯誤不能經過PL/SQL異常處理來處理,由於這些錯誤發生在PL/SQL程序執行以前。

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

5.1 異常處理概念

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

有三種類型的異常錯誤:

    1. 預約義 ( Predefined )錯誤

  ORACLE預約義的異常狀況大約有24個。對這種異常狀況的處理,無需在程序中定義,由ORACLE自動將其引起。

    2. 非預約義 ( Predefined )錯誤

   即其餘標準的ORACLE錯誤。對這種異常狀況的處理,須要用戶在程序中定義,而後由ORACLE自動將其引起。

    3. 用戶定義(User_define) 錯誤

程序執行過程當中,出現編程人員認爲的非正常狀況。對這種異常狀況的處理,須要用戶在程序中定義,而後顯式地在程序中將其引起。

異常處理部分通常放在 PL/SQL 程序體的後半部,結構爲:

EXCEPTION
   WHEN first_exception THEN  <code to handle first exception >
   WHEN second_exception THEN  <code to handle second exception >
   WHEN OTHERS THEN  <code to handle others exception >
END;

 

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

5.1.1 預約義的異常處理

   預約義說明的部分 ORACLE 異常錯誤

錯誤號

異常錯誤信息名稱

說明

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;

 

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;

 

5.1.2 非預約義的異常處理

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

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

<異常狀況>  EXCEPTION;

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);
   /* -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;

 

5.1.3 用戶自定義的異常處理

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

對於這類異常狀況的處理,步驟以下:

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

<異常狀況>  EXCEPTION;

2. RAISE <異常狀況>;

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;

 

5.1.4  用戶定義的異常處理

調用DBMS_STANDARD(ORACLE提供的包)包所定義的RAISE_APPLICATION_ERROR過程,能夠從新定義異常錯誤消息,它爲應用程序提供了一種與ORACLE交互的方法。

RAISE_APPLICATION_ERROR 的語法以下:

    RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors] );

    這裏的error_number 是從 –20,000 到 –20,999 之間的參數,

    error_message 是相應的提示信息(< 2048 字節),

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;

 

例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;

 

5.2 異常錯誤傳播

    因爲異常錯誤能夠在聲明部分和執行部分以及異常錯誤部分出現,於是在不一樣部分引起的異常錯誤也不同。

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

    當一個異常錯誤在執行部分引起時,有下列狀況:

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

l 若是沒有對當前塊異常錯誤設置定義處理器,則經過在包含塊中引起它來傳播異常錯誤。而後對該包含塊執行步驟1)。

5.2.2 在聲明部分引起異常錯誤

    若是在聲明部分引發異常狀況,即在聲明部分出現錯誤,那麼該錯誤就能影響到其它的塊。好比在有以下的PL/SQL程序:

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

 

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

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

 

5.3 異常錯誤處理編程

    在通常的應用處理中,建議程序人員要用異常處理,由於若是程序中不聲明任何異常處理,則在程序運行出錯時,程序就被終止,而且也不提示任何信息。下面是使用系統提供的異常來編程的例子。

5.4  在 PL/SQL 中使用 SQLCODE, SQLERRM異常處理函數

    因爲ORACLE 的錯信息最大長度是512字節,爲了獲得完整的錯誤提示信息,咱們可用 SQLERRM和 SUBSTR 函數一塊兒獲得錯誤提示信息,方便進行錯誤,特別是若是WHEN OTHERS異常處理器時更爲方便。

SQLCODE  返回遇到的Oracle錯誤號,

SQLERRM  返回遇到的Oracle錯誤信息.

如:  SQLCODE=-100   è SQLERRM=’no_data_found ‘

SQLCODE=0      è SQLERRM=’normal, successfual completion’

例6. 將ORACLE錯誤代碼及其信息存入錯誤代碼表

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

DECLARE
   err_msg  VARCHAR2(100);
BEGIN
   /*  獲得全部 ORACLE 錯誤信息  */
   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;

 

例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;

 

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

DECLARE
   empno_remaining EXCEPTION;
   PRAGMA EXCEPTION_INIT(empno_remaining, -1);
   /* -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;

 

 

一、異常的優勢 
   
  若是沒有異常,在程序中,應當檢查每一個命令的成功仍是失敗,如 
  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 
   
  二、異常的分類 
   
  有兩種類型的異常,一種爲內部異常,一種爲用戶自定義異常,內部異常是執行期間返回到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 
   
  三、異常的拋出 
   
  由三種方式拋出異常 
   
  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; 
   
  四、異常的處理 
   
  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; 
   
  五、異常的傳播 
   
  沒有處理的異常將沿檢測異常調用程序傳播到外面,當異常被處理並解決或到達程序最外層傳播中止。在聲明部分拋出的異常將控制轉到上一層的異常部分。 
   
  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 來手動生成錯誤。

l         Raise exception;

l         Raise package.exception;

l         Raise;

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

       Declare

              Invalid_id exception;

              Id_values varchar(2);

       Begin

              Id_value:=id_for(‘smith’);

              If substr(id_value,1,1)!=’x’

              Then

                     Raise invalid_id;

              End if;

       Exception

              When invalid_id

              Then

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

       End;

這是一個生成自定義異常的例子,固然也能夠生成系統異常:

       declare

              employee_id_in number;

       Begin

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

If employee_id_in=0

Then

       Raise zero_devided;

End if;

       Exception

              When zero_devided

              Then

                     Dbms_output.put_line(‘wrong!’);

       End;

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

       If day_overdue(isbn_in, browser_in) > 365

       Then

              Raise overdue_pkg.book_is_lost

       End if;

在最後一種 raise 的形式中,不帶任何參數。這種狀況只出如今但願將當前的異常傳到外部程序時。

       Exception

              When no_data_found

              Then

                     Raise;

       End;

 

Pl.sql 使用 raise_application_error 過程來生成一個有具體描述的異常。當使用這個過程時,當前程序被停止,輸入輸出參數被置爲原先的值,但任何 DML 對數據庫所作的改動將被保留,能夠在以後用 rollback 命令回滾。下面是該過程的原型:

       Procedure raise_application_error(

       Num binary_integer;

       Msg varchar2;

       Keeperrorstack Boolean default false

)

其中 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)

    IS

       l_message error_table.error_string%TYPE;

    BEGIN

       SELECT error_string

         INTO l_message

         FROM error_table, v$nls_parameters v

        WHERE error_number = code_in

          AND string_language = v.VALUE

          AND v.parameter = 'NLS_LANGUAGE';

 

       RAISE_APPLICATION_ERROR (code_in, l_message);

    END;

 

 

ORACL內部異常:

 

1:預約義異常 

用於處理常見的Oracle錯誤 

2:非預約義異常 

用於處理預約義異常所不能處理的Oracle錯誤 

3:自定義異常 

用於處理於Oracle錯誤無關的其餘狀況 

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

  EXCEPTION 

    WHEN  exception_Name THEN  --exception_Name爲異常的名字 

      statement1; 

    WHEN OTHERS THEN 

  statement1; 

異常處理部分從關鍵字EXCEPTION開始,在異常處理部分使用WHEN字句捕捉各類異常,若是有其餘未預約義到的異常,使用WHEN OTHERS THEN字句進行捕捉和處理。 

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

     

    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: 不能禁用介質恢復 - 文件  須要介質恢

相關文章
相關標籤/搜索