日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle入门(十四.14)之处理异常

發(fā)布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle入门(十四.14)之处理异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、什么是異常?

在執(zhí)行破壞程序正常運行的程序期間發(fā)現(xiàn)錯誤時會發(fā)生異常。?

有很多可能的例外原因:用戶在輸入時出現(xiàn)拼寫錯誤; 程序無法正常工作; 廣告網頁不存在; 等等。

你能想到在使用網站或應用程序時遇到的錯誤嗎?


二、PL / SQL中的異常

這個例子工作正常。 但是如果你進入“韓國,南方”而不是“韓國”呢?

DECLAREv_country_name wf_countries.country_name%TYPE:= 'Republic of Korea';v_elevation wf_countries.highest_elevation%TYPE; BEGINSELECT highest_elevationINTO v_elevationFROM wf_countriesWHERE country_name = v_country_name;DBMS_OUTPUT.PUT_LINE(v_country_name); END;

Republic of Korea

Statement processed.

Exceptions in PL/SQL (continued) Handling Exceptions DECLAREv_country_name wf_countries.country_name%TYPE:='Korea, South';v_elevation wf_countries.highest_elevation%TYPE; BEGINSELECT highest_elevationINTO v_elevationFROM wf_countriesWHERE country_name = v_country_name; END;

請注意代碼無法按預期工作。 沒有找到韓國,南韓的數(shù)據,因為國名實際上是作為韓國存儲的。?

PL / SQL中的這種類型的錯誤稱為異常。當代碼無法按預期工作時,PL / SQL會引發(fā)異常。 發(fā)生異常時,您說異常已被“引發(fā)”。


三、什么是異常處理程序?

????異常處理程序是定義引發(fā)異常(即發(fā)生錯誤時)要執(zhí)行的恢復操作的代碼。
????編寫代碼時,程序員需要預測執(zhí)行代碼期間可能發(fā)生的錯誤類型。 他們需要在代碼中包含異常處理程序來解決這些錯誤。 從某種意義上說,異常處理程序允許程序員“防御”他們的代碼。

(1)程序員想要通過使用異常處理程序來解決什么類型的錯誤?
?系統(tǒng)錯誤(例如,硬盤已滿)
?數(shù)據錯誤(例如,試圖復制主鍵值)
?用戶操作錯誤(例如,數(shù)據輸入錯誤)

?許多其他可能性!

(2)為什么異常處理很重要?

你能想到為什么異常處理很重要的原因嗎?

一些原因包括:
?保護用戶免受錯誤的影響(頻繁的錯誤可能會阻止用戶和/或導致用戶退出應用程序。)
?保護數(shù)據庫免遭錯誤(數(shù)據可能丟失或被覆蓋。)
?重大錯誤需要大量系統(tǒng)資源(如果發(fā)生錯誤,糾正錯誤可能代價高昂;用戶可能經常致電幫助臺尋求幫助以解決錯誤。)

?代碼更具可讀性(錯誤處理例程可以寫入發(fā)生錯誤的同一個塊中。)


四、使用PL / SQL處理異常

????塊在PL / SQL引發(fā)異常時總是終止,但您可以指定異常處理程序在塊結束之前執(zhí)行最終操作。 異常部分以關鍵字EXCEPTION開頭。

DECLAREv_country_name wf_countries.country_name%TYPE := 'Korea, South';v_elevation wf_countries.highest_elevation%TYPE; BEGINSELECT highest_elevation INTO v_elevationFROM wf_countries WHERE country_name = v_country_name; EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE ('Country name, '|| v_country_name ||',cannot be found. Re-enter the country name using the correctspelling.'); END;

當處理異常時,PL / SQL程序不會突然終止。
當引發(fā)異常時,控制轉移到異常部分,并執(zhí)行異常部分中的處理程序。 PL / SQL塊終止正常,成功完成。

Country name, Korea, South,
Cannot be found. Re-enter the country name using the correct spelling.

Statement processed.

一次只能發(fā)生一個例外情況。 發(fā)生異常時,PL / SQL在離開塊之前只處理一個處理程序。


點A處的代碼不會執(zhí)行,因為SELECT語句失敗。

DECLAREv_country_name wf_countries.country_name%TYPE := 'Korea, South';v_elevation wf_countries.highest_elevation%TYPE; BEGINSELECT highest_elevation INTO v_elevationFROM wf_countries WHERE country_name = v_country_name;DBMS_OUTPUT.PUT_LINE(v_elevation); -- Point A EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE ('Country name, '|| v_country_name ||',cannot be found. Re-enter the country name using the correctspelling.'); END;

以下是另一個例子。 塊中的select語句檢索Stock Clerks的姓氏。

DECLAREv_lname VARCHAR2(15); BEGINSELECT last_name INTO v_lnameFROM employees WHERE job_id = 'ST_CLERK';DBMS_OUTPUT.PUT_LINE('The last name of the ST_CLERK is : '||v_lname); END;

但是,由于數(shù)據中存在多個ST_CLERK,因此會引發(fā)異常。



以下代碼包含預定義Oracle服務器錯誤的處理程序,稱為TOO_MANY_ROWS。您將在下一課中了解有關預定義服務器錯誤的更多信息。

DECLAREv_lname employees.last_name%TYPE; BEGINSELECT last_name INTO v_lnameFROM employees WHERE job_id = 'ST_CLERK';DBMS_OUTPUT.PUT_LINE('The last name of the ST_CLERK is : '||v_lname); EXCEPTIONWHEN TOO_MANY_ROWS THENDBMS_OUTPUT.PUT_LINE (' Your select statement retrieved multiple rows. Consider using a cursor.'); END;


五、陷阱異常

可以通過在PL / SQL塊的異常處理部分中包含相應的處理程序來處理或“陷入”任何錯誤。 句法:
EXCEPTIONWHEN exception1 [OR exception2 . . .] THENstatement1;statement2;. . .[WHEN exception3 [OR exception4 . . .] THENstatement1;statement2;. . .][WHEN OTHERS THENstatement1;statement2;. . .]

每個處理程序由一個WHEN子句組成,該子句指定一個異常名稱,然后是引發(fā)該異常時要執(zhí)行的一系列語句。 您可以在EXCEPTION部分包含任意數(shù)量的處理程序來處理特定的異常。 但是,對于單個異常,您不能擁有多個處理程序。

在語法中:
?異常是預定義異常的標準名稱或在聲明部分中聲明的用戶定義異常的名稱

?語句是一個或多個PL / SQL或SQL語句

?OTHERS是一個可選的異常處理條款,可以捕捉任何未明確處理的異常


六、其他異常處理程序

異常處理部分只捕獲指定的異常; 除非使用OTHERS異常處理程序,否則任何其他異常都不會被捕獲。
OTHERS處理程序捕獲所有尚未被捕獲的異常。 如果使用,OTHERS必須是定義的最后一個異常處理程序。


考慮下面的例子:
?如果程序引發(fā)異常NO_DATA_FOUND,則會執(zhí)行相應處理程序中的語句。
?如果引發(fā)異常TOO_MANY_ROWS,則執(zhí)行相應處理程序中的語句。

?但是,如果發(fā)生其他異常,則會執(zhí)行OTHERS異常處理程序中的語句。

EXCEPTIONWHEN NO_DATA_FOUND THENstatement1;...WHEN TOO_MANY_ROWS THENstatement2;...WHEN OTHERS THENstatement3;


七、捕獲異常指南

在捕獲異常時遵循以下準則:
?每當有可能發(fā)生錯誤時總是添加異常處理程序。 在計算,字符串操作和SQL數(shù)據庫操作期間,錯誤尤其可能。
?盡可能處理命名的異常,而不是在異常處理程序中使用OTHERS。 了解預定義例外的名稱和原因。

?使用不良數(shù)據組合來測試代碼,以查看可能出現(xiàn)的錯誤。

?在異常處理程序中寫出調試信息。

?仔細考慮每個異常處理程序是否應該提交事務,將其回滾或讓其繼續(xù)。 無論錯誤有多嚴重,您都希望使數(shù)據庫保持一致狀態(tài)并避免存儲任何不良數(shù)據。







總結

以上是生活随笔為你收集整理的Oracle入门(十四.14)之处理异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。