oracle 儲存過程 異常處理機制

2022-03-28 10:37:36 字數 2386 閱讀 1953

下面將如何在儲存過程中判斷sql語句的錯誤,向大家作乙個詳細地介紹, 希望大家讓程式開發人員遵從這樣的方式編寫sql儲存過程,以避免造成在程式聯調過程中應用程式狀態不明確的問題。

如以下**表示,在sql儲存過程中可以定義執行狀態的出口引數,而且盡量返回系統報告的sqlcode, 而並非個人定義的,這樣可以更好地判斷是什麼樣的錯誤, 也可以返回錯誤說明,有的開發人員不知何故,將返回碼定義成79700,如果是參照db2說明開發的,可能是誤會了說明的含義,這個問題已經造成了聯調過程中的誤導判斷和無法確定問題的原因,希望大家注意;

如果需要忽略not found, 可以declare continue handler for not found, 如果需要並且可以將returncode設定為零,以便於在程式體內判斷returncode的時候可以忽略這個not found;

可以定義declare exit handler for sqlexception, 當出現sql錯誤的時候,中斷程式執行過程,跳出儲存過程,也可以定義declare continue handler for sqlexception, 同時判斷sqlcode的值,用以忽略你希望忽略的error code, 在程式的最後列出了這種使用方式:

create procedure out_language (...,out returncode integer, out returnmsg char(32))

-- returncode 返回執行中的的錯誤**

-- returnmsg 返回執行中的的錯誤描述

specific sql_out_language

language sql

begin

declare sqlcode integer default 0;

declare sqlstate char(5) default ´00000´;

declare errorlabel char(32) default ´´;

......

-- in case of no data found   

declare continue handler for not found

begin

set returncode = sqlcode;

-- 也可以設定為 set returncode = 0; 因為這個declare是為了忽略not found的執行結果

end;

-- in case of sql error

declare exit handler for sqlexception

begin

set returncode = sqlcode;

set returnmsg = errorlabel;

end;

對於sqlexception也可以這樣定義,用來忽略一些特定的error code, 但是要在程式體內判斷returncode的數值:

-- in case of sql error

declare continue handler for sqlexception

begin

if (sqlcode = -454) then

set returncode = 0;

-- 建立的資料庫物件已經存在或者插入的記錄在唯一鍵值上重複

else

set returncode = sqlcode;

set returnmsg = errorlabel;

end if;

end;

......

if (returncode = 0) then

......

end if;

if (returncode = 0) then

...

end if;

end

--儲存過程結束

dwd_china 回覆於:2005-08-23 09:20:16  

在儲存過程的後面加上這樣的異常處理就可以了

exception

----錯誤處理

when dup_val_on_index then

----主鍵衝突

rollback;

when value_error then

----長度截斷錯誤

rollback;

when program_error then

----pl/sql內部錯誤

rollback;

when timeout_on_resource then

----系統等待超時

rollback;

when others then

----其他異常錯誤

rollback;

trackback:

ORACLE儲存過程異常處理。

create or replace procedure p tx getfaxdata as v errorcode number 出錯的 v errormsg varchar2 200 錯誤的訊息顯示 v currentuser varchar2 8 當前資料庫使用者 v information ...

python python try異常處理機制

python的try語句有兩種風格 一 種是處理異常 try except else 二 種是無論是否發生異常都將執行最後的 try finally try except else風格 try 語句 執行別的 except 名字 語句 如果在try部份引發了 name 異常 except 名字 資料...

oracle異常處理機制

oracle 異常處理機制 1.異常處理 在pl sql中的 乙個警告和錯誤稱為異常。異常包括編譯異常和執行異常。2.異常的分類 系統異常 自定義異常 3.異常的結構 exception when then 4.常見的系統異常 系統異常說明 dup val on index 違法唯一性約束 no d...