丟擲異常
oracle有三種型別的異常錯誤:
1. 預定義(predefined)異常
oracle預定義的異常情況大約有24個。對這種異常情況的處理,無需在程式中定義,由oracle自動將其引發。
2. 非預定義(predefined)異常
即其他標準的oracle錯誤。對這種異常情況的處理,需要使用者在程式中定義,然後由oracle自動將其引發。
3. 使用者定義(user_define)異常
程式執行過程中,出現程式設計人員認為的非正常情況。對這種異常情況的處理,需要使用者在程式中定義,然後顯式地在程式中將其引發。
在pl/sql中有三種方式丟擲異常
通過pl/sql執行時引擎——丟擲oracle異常
使用raise語句——丟擲使用者定義異常
1、預定義異常是指oracle系統為一些常見錯誤定義好的異常,例如表中的主鍵值重複,以及除數為0等。
oracle預定義異常:
命名的系統異常
產生原因
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 在等待資源時超時
too_many_rows
select into 語句返回多條記錄
value_error
發生算術,轉換,截斷或大小約束錯誤
zero_divied
檢視講0作為除數
例9.19在pl/sql中將乙個無法表示有效數字的字元轉換為數字,如下:
declare
age varchar2(4) := '14歲';
begin
dbms_output.put_line('測試異常發生前的內容有沒有執行');
dbms_output.put_line(cast(age as number));
dbms_output.put_line('測試異常發生後的內容有沒有執行');
end;
執行的結果:
注意:從執行的結果可以看出,oracle丟擲ora-06502異常,提示字元到數值的轉換錯誤,在丟擲異常後,由於程式中中沒有處理該異常的**,因此程式終止,所以最後的結果是異常發生前的內容被執行,而之後的內容沒有被執行。
對上面的**進行異常處理:
dbms_output.put_line('測試異常發生後的內容有沒有執行');
end;
執行的結果:
2、非預定義異常
除了oracle預定義好的異常以外,還有一些其他異常也屬於程式本身的邏輯錯誤,
例如違反表的外來鍵約束、檢查約束等,oralce只為這些異常提供了錯誤**,而這些異常同樣需要處理,只不過學喲啊在pl/sql塊中使用pragma execption_init語句為該異常設定名稱
declare
***_check exception;
pragma exception_init(***_check,-2290);
begin
insert into student values('路');
exception
when ***_check then
dbms_output.put_line('插入的值違反了***列的檢查約束');
end;/
3、自定義異常
PLSQL 異常處理
1.異常塊begin pl sql塊 exception when no data found then 沒有找到資料 響應命令 when too many rows then 返回多行,隱式游標每次只能檢索一行資料 響應命令 when invalid number then 字元向數字轉換失敗 響...
plsql異常處理
1.在plsql 中 形式引數和 where 語句中的引數不能一樣,否則的話就就會出現個中莫名其妙的錯誤。function validate import supplier p task seq in number,任務號 p line num in number,行號 p vendor name ...
PL SQL異常處理
pl sql提供了良好的異常處理機制,當程式執行出現錯誤時就會觸發異常。異常被觸發時,程式執行即終止,在pl sql塊中提供了異常處理的部分,從而可以捕獲乙個異常進行特殊處理。嚴格意義上來講,乙個完整的pl sql塊應該具有以下結構 declare declare variables begin e...