pl/sql
程式在執行的過程當中,可能會出現錯誤或者異常的情況,例如無法建立與oracle的連線,或者返回多行的錯誤。好的程式應該是對可能發生的異常情況進行處理,異常處理**在exception中實現。可以在exception塊中使用when語句來定義異常處理。when語句的使用方法如下:
exception
when 《異常情況名》 then
《異常處理**>
when 《異常情況名》 then
《異常處理**>
……when others then
《異常處理**>
異常情況名是oracle定義的異常情況標識,當when語句中指定的異常情況發生的時候,then關鍵字後面的異常處理**將會被執行:
異常情況名
ora**
sql**
說明access_into_null
ora-06530
-6530
試圖賦值到乙個未初始化的物件
collection_is_null
ora-06531
-6531
試圖使用未初始化的嵌入表或者變長陣列
cursor_already_open
ora-06511
-6511
試圖開啟乙個已經開啟的游標
dup_val_on_index
ora-00001
-1試圖向乙個表中插入資料,但該行資料不符合索引約束
invalid_cursor
ora-01001
-1001
試圖進行游標操作,但是卻不能開啟游標
invalid_number
ora-01722
-1722
字元向數字的轉換失敗
login_denied
ora-01017
-1017
試圖和oracle建立連線,但是卻不能提供有效的使用者名稱和口令
no_data_found
ora-01403
100執行了select into語句,但是卻沒有匹配的行資料
not_logged_on
ora-01012
-1012
試圖進行資料庫操作,但沒登陸
program_error
ora-06501
-6501
pl/sql內部錯誤
rowtype_mismatch
ora-06504
-6504
pl/sql返回的游標變數和主游標不匹配
self_is_null
ora-30625
-30625
試圖執行物件例程的乙個成員方法,但全程為空(null)
storage_error
ora-06500
-6500
儲存空間錯誤
subscript_beyond_count
ora-06532
-6532
試圖通過使用索引來引入嵌入表,但是此索引比表中的數值還要大
sys_invalid_rowid
ora-01410
-1410
試圖將乙個字串傳遞給rowid,但是操作失敗
timeout_on_resource
ora-00051
-51當oracle等待分配資源的時候,資源已經耗盡
too_many_rows
ora-01422
-1422
執行一條select into語句,但是卻返回了多行資料
value_error
ora-06502
-6502
當試圖將乙個值儲存到乙個變數時,此變數不接受這個值。可能是由於該值太大了或者與變數的型別不匹配
zero_divide
ora-01476
-1476
試圖用0做除數
以下是乙個控制異常的示例程式:
declare
var_namevarchar2(
100);
begin
selectaac003
intovar_name
fromac01、、
whereaac002=
'***x';
exception
whentoo_many_rowsthen
dbms_output.put_line(
'返回多條資料');
whenno_data_foundthen
dbms_output.put_line(
'沒有找到資料');
whenothersthen
dbms_output.put_line(
'執行有誤'
||sqlerrm);
end;
PLSQL中的異常處理
plsql中的異常一般有兩種 1 oracle 內部錯誤丟擲的異常 這又分為預定義異常 有錯誤號 常量定義 和 非預定義例外 僅有錯誤號,無常量定義 2 程式設計師顯式的丟擲的異常 處理預定義的例外 有些常見例外,oracle 都已經預定義好了,使用時無需預先宣告,比如 no data found ...
pl sql異常處理
丟擲異常 oracle有三種型別的異常錯誤 1 預定義 predefined 異常 oracle預定義的異常情況大約有24個。對這種異常情況的處理,無需在程式中定義,由oracle自動將其引發。2 非預定義 predefined 異常 即其他標準的oracle錯誤。對這種異常情況的處理,需要使用者在...
PLSQL 異常處理
1.異常塊begin pl sql塊 exception when no data found then 沒有找到資料 響應命令 when too many rows then 返回多行,隱式游標每次只能檢索一行資料 響應命令 when invalid number then 字元向數字轉換失敗 響...