PLSQL

PL / SQL異常

PL / SQL異常

異常被稱為程序執行期間的錯誤條件。程序員使用exception來捕獲程序中的這些錯誤條件。有兩種不同的例外:

  1. 係統定義的異常
  2. 用戶自定義異常

異常處理語法:

DECLARE  BEGIN <可執行命令> EXCEPTION <異常處理goes here > WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........exception - 3-handling-statements結束;

提高異常

數據庫服務器在出現內部數據庫錯誤時自動引發異常,但這些異常是由程序員使用RAISE命令顯式引發的。

語法:DECLARE exception_name EXCEPTION;開始IF條件然後拋出異常如果;EXCEPTION WHEN exception_name THEN語句;結束;
語法:DECLARE my_exception EXCEPTION;示例:DECLARE t_id teachers。Id %type:= &tt_id;t_name teacherS.Name %類型;t_addr teachers.address %類型;——用戶自定義異常ex_invalid_idstart IF t_id <= 0 THEN RAISE ex_invalid_id;ELSE SELECT name, address INTO t_name, t_addr FROM teacherDBMS_OUTPUT。PUT_LINE ('Name: '|| t_name);DBMS_OUTPUT。PUT_LINE ('Address: ' || t_addr); END IF;

異常

WHEN ex_invalid_id THEN

dbms_output。put_line('ID必須大於零!');

當no_data_found THEN

dbms_output。put_line('沒有這樣的老師!');

當別人

dbms_output.put_line(“錯誤!”);

結束;/ Output: Enter value for tt_id: 0(讓我們輸入一個值0)old 2: t_id teachers。Id %type:= &tt_id;新2:t_id教師。Id %type:= 0;ID必須大於零!PL/SQL過程成功完成。

預定義的異常

有預定義的異常,當程序違反任何數據庫規則時執行這些異常。

異常

甲骨文的錯誤

SQL代碼

描述

ACCESS_INTO_NULL

06530

-6530年

當空對象被自動賦值時將被引發。

CASE_NOT_FOUND

06592

-6592年

當CASE語句的when子句中沒有選擇任何選項,並且也沒有else子句時,將引發該異常。

COLLECTIONS_IS_NULL

06531

-6531年

當程序試圖將除exists以外的集合方法應用到未初始化的VARRAY嵌套表時,將引發此問題。

DUP_VAL_ON_INDEX

00001

-1

當試圖將重複元素存儲在具有唯一索引的列中時,將引發此異常。

INVALID_CURSOR

01001

-1001年

當試圖進行不允許的遊標操作時將引發此異常。

INVALID_NUMBER

01722

-1722年

當將字符串轉換為數字失敗時將引發此異常。

LOGIN_DENIED

01017

-1017年

當程序試圖使用無效的用戶名和密碼登錄時,將引發此問題。

NO_DATA_FOUND

01403

+ 100

當SELECTINTO語句不返回任何行時,將引發此異常。

NOT_LOGGED_ON

01012

-1012年

在數據庫問題調用時被引發。

PROGRAM_ERROR

06501

-6501年

這是由於PL/SQL的內部問題引起的。

ROWTYPE_MISMATCH

06504

-6504年

如果遊標從具有不兼容數據類型的變量中獲取值。

SELF_IS_NULL

30625

-30625年

當調用成員方法時,將引發該成員方法。

STORAGE_ERROR

06500

-6500年

如果內存損壞,或者PL/SQL正在運行程序,則會引發該異常。

TOO_MANY_ERRORS

01422

-1422年

當SELECTINTO語句返回多行時將引發此異常。

VALUE_ERROR

06502

-6502年

由於算術、轉換或截斷錯誤而引發。

ZERO_DIVIDE

01476

1476

當一個數除以0時是上升的。

Baidu
map