Oracle入门(十四.14)之处理异常
一、什么是異常?
在執行破壞程序正常運行的程序期間發現錯誤時會發生異常。?
有很多可能的例外原因:用戶在輸入時出現拼寫錯誤; 程序無法正常工作; 廣告網頁不存在; 等等。
你能想到在使用網站或應用程序時遇到的錯誤嗎?
二、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;請注意代碼無法按預期工作。 沒有找到韓國,南韓的數據,因為國名實際上是作為韓國存儲的。?
PL / SQL中的這種類型的錯誤稱為異常。當代碼無法按預期工作時,PL / SQL會引發異常。 發生異常時,您說異常已被“引發”。
三、什么是異常處理程序?
????異常處理程序是定義引發異常(即發生錯誤時)要執行的恢復操作的代碼。????編寫代碼時,程序員需要預測執行代碼期間可能發生的錯誤類型。 他們需要在代碼中包含異常處理程序來解決這些錯誤。 從某種意義上說,異常處理程序允許程序員“防御”他們的代碼。
(1)程序員想要通過使用異常處理程序來解決什么類型的錯誤?
?系統錯誤(例如,硬盤已滿)
?數據錯誤(例如,試圖復制主鍵值)
?用戶操作錯誤(例如,數據輸入錯誤)
?許多其他可能性!
(2)為什么異常處理很重要?
你能想到為什么異常處理很重要的原因嗎?
一些原因包括:
?保護用戶免受錯誤的影響(頻繁的錯誤可能會阻止用戶和/或導致用戶退出應用程序。)
?保護數據庫免遭錯誤(數據可能丟失或被覆蓋。)
?重大錯誤需要大量系統資源(如果發生錯誤,糾正錯誤可能代價高昂;用戶可能經常致電幫助臺尋求幫助以解決錯誤。)
?代碼更具可讀性(錯誤處理例程可以寫入發生錯誤的同一個塊中。)
四、使用PL / SQL處理異常
????塊在PL / SQL引發異常時總是終止,但您可以指定異常處理程序在塊結束之前執行最終操作。 異常部分以關鍵字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程序不會突然終止。
當引發異常時,控制轉移到異常部分,并執行異常部分中的處理程序。 PL / SQL塊終止正常,成功完成。
Country name, Korea, South,
Cannot be found. Re-enter the country name using the correct spelling.
Statement processed.
一次只能發生一個例外情況。 發生異常時,PL / SQL在離開塊之前只處理一個處理程序。
點A處的代碼不會執行,因為SELECT語句失敗。
以下是另一個例子。 塊中的select語句檢索Stock Clerks的姓氏。
但是,由于數據中存在多個ST_CLERK,因此會引發異常。
以下代碼包含預定義Oracle服務器錯誤的處理程序,稱為TOO_MANY_ROWS。您將在下一課中了解有關預定義服務器錯誤的更多信息。
五、陷阱異常
可以通過在PL / SQL塊的異常處理部分中包含相應的處理程序來處理或“陷入”任何錯誤。 句法:EXCEPTIONWHEN exception1 [OR exception2 . . .] THENstatement1;statement2;. . .[WHEN exception3 [OR exception4 . . .] THENstatement1;statement2;. . .][WHEN OTHERS THENstatement1;statement2;. . .]
每個處理程序由一個WHEN子句組成,該子句指定一個異常名稱,然后是引發該異常時要執行的一系列語句。 您可以在EXCEPTION部分包含任意數量的處理程序來處理特定的異常。 但是,對于單個異常,您不能擁有多個處理程序。
在語法中:
?異常是預定義異常的標準名稱或在聲明部分中聲明的用戶定義異常的名稱
?語句是一個或多個PL / SQL或SQL語句
?OTHERS是一個可選的異常處理條款,可以捕捉任何未明確處理的異常
六、其他異常處理程序
異常處理部分只捕獲指定的異常; 除非使用OTHERS異常處理程序,否則任何其他異常都不會被捕獲。OTHERS處理程序捕獲所有尚未被捕獲的異常。 如果使用,OTHERS必須是定義的最后一個異常處理程序。
考慮下面的例子:
?如果程序引發異常NO_DATA_FOUND,則會執行相應處理程序中的語句。
?如果引發異常TOO_MANY_ROWS,則執行相應處理程序中的語句。
?但是,如果發生其他異常,則會執行OTHERS異常處理程序中的語句。
EXCEPTIONWHEN NO_DATA_FOUND THENstatement1;...WHEN TOO_MANY_ROWS THENstatement2;...WHEN OTHERS THENstatement3;
七、捕獲異常指南
在捕獲異常時遵循以下準則:
?每當有可能發生錯誤時總是添加異常處理程序。 在計算,字符串操作和SQL數據庫操作期間,錯誤尤其可能。
?盡可能處理命名的異常,而不是在異常處理程序中使用OTHERS。 了解預定義例外的名稱和原因。
?使用不良數據組合來測試代碼,以查看可能出現的錯誤。
?在異常處理程序中寫出調試信息。
?仔細考慮每個異常處理程序是否應該提交事務,將其回滾或讓其繼續。 無論錯誤有多嚴重,您都希望使數據庫保持一致狀態并避免存儲任何不良數據。
總結
以上是生活随笔為你收集整理的Oracle入门(十四.14)之处理异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀超长名字 王者荣耀超长名字大全
- 下一篇: 美光在马来西亚启用其最先进的组装和测试工