異常是oracle中使用者處理**時重要的乙個環節,為了避免**流程出現崩潰,異常可以很好的避免由於系統或者小錯誤導致**流程結束;另外,異常分為預定義異常和自定義異常。
**預定義異常:**預定義異常是oracle系統已經定義好的異常,遇到錯誤系統會自動地丟擲。
**自定義異常:**自定義異常是使用者在**中新定義的遺產,通常是在業務邏輯或者系統硬體出現錯誤時,丟擲異常,避免由於這些不必要的錯誤導致程式出錯。
自定義異常基本有以下幾個步驟:
1:定義異常
declare
null_excep exception;
2:丟擲異常
begin
if class_id is
null
then
raise null_excep;
3:異常處理
when null_excep then
dbms_output.put_line(
'class_id欄位為空');
end;
但是在異常丟擲後,存在乙個問題,我們後續的**就不會執行了。比如,我們迴圈遍歷游標中的資料時,我們將讀取到的資料插入到表中(id不准為空),如果上述讀取游標的class_id為空,那麼就會丟擲異常,就意味著後續的游標中的資料就不會讀取,不會插入到表中,不符合我們的預期。
我們期望的是將游標中的所有資料讀取完,然後只插入class_id不為空的資料行,如果class_id為空,就丟擲異常,繼續讀取和插入。
為了解決這個問題,我們只需要將丟擲異常和異常處理放置到begin,end巢狀中。即:
create
orreplace p_excep_cur as
null_excep exception;
class_new1 class_new%rowtype;
cursor cur_ex is
select
*from class_new;
begin
for class_new1 in cur_ex loop
begin
if class_id is
null
then
raise null_excep;
when null_excep then
dbms_ouput.put_line(
'class_id 欄位為空,無法插入');
endif
;end
;if class_id is
notnull
then
class_new1.class_id:=sysdate;
insert
into class_new2(class_new1.class_id,class_new1.class_name,class_new1.class_te,class_new1.class_date)
;commit
;endif;
endloop
;end
;
這樣將異常語句放置在begin,end巢狀中,在丟擲異常之後,會根據if判斷繼續執行插入語句。 java throw丟擲異常
1 throws關鍵字通常被應用在宣告方法時,用來指定可能丟擲的異常。多個異常可以使用逗號隔開。當在主函式中呼叫該方法時,如果發生異常,就會將異常拋給指定異常物件。如下面例子所示 public class shoot public static void main string args catch...
python丟擲異常
1 python 使用 raise 語句丟擲乙個指定的異常。raise nameerror hithere traceback most recent call last file line 1,in module raise nameerror hithere nameerror hithere ...
自行丟擲異常
如果throw語句丟擲的異常是checked異常,則該throw語句要麼處於try塊裡,顯式捕獲該異常,要麼放在乙個帶throws宣告丟擲的方法中,即把該異常交給該方法的呼叫者處理 如果throw語句丟擲的異常是runtime異常,既可以顯式捕獲該異常,也可以不用理會該異常,把該異常交給呼叫者處理。...