Oracle 異常處理

2021-07-23 07:02:40 字數 3347 閱讀 2447

1、什麼是異常

在pl/sql

中的乙個警告或錯誤的情形都可被稱為異常。包括編譯時錯誤

(pls)

和執行時錯誤

(ora)

。乙個異常通常包含乙個錯誤**和錯誤文字,分別指示異常的編號和具體錯誤資訊。

異常情況處理(exception)是用來處理正常執行過程中未預料的事件,程式塊的異常處理預定義的錯誤和自定義錯誤,由於pl/sql程式塊一旦產生異常而沒有指出如何處理時,程式就會自動終止整個程式執行。

2、異常的分類

1. 預定義 ( predefined )錯誤

oracle預定義的異常情況大約有24個。對這種異常情況的處理,無需在程式中定義,由oracle自動將其引發。

2. 非預定義 ( predefined )錯誤

即其他標準的oracle錯誤。對這種異常情況的處理,需要使用者在程式中定義,然後由oracle自動將其引發。

3. 使用者定義(user_define) 錯誤

程式執行過程中,出現程式設計人員認為的非正常情況。對這種異常情況的處理,需要使用者在程式中定義,然後顯式地在程式中將其引發。

3、異常的結構

exception  

when exception1 [

or exception2 . . .

]then

statement1;

statement2;

. . . [

when exception3 [or exception4 . . .

]then

statement1;

statement2;

. . .] [

when others then

statement1;

statement2;

. . .]--

在異常部分when 子句沒有數量限制

--when others 是最後乙個子句

--異常處理部分從關鍵字exception開始

--當異常丟擲後,控制無條件轉到異常處理部分

--在離開塊之前只能執行一種異常處理

4、異常型別4.1 預定義異常預定義異常是由 oracle 為常見錯誤預先定義的,不需要顯式宣告。

在相應的異常處理例程中引用錯誤的標準名來截獲乙個oracle 伺服器預定義錯誤。

'沒有找到符合條件的資料');

when too_many_rows then

dbms_output.put_line(

'返回的資料行過多');

when others then

dbms_output.put_line(

'eorror:

'||sqlcode||'-

'||sqlerrm);

end;

4.2 非預定義異常1.  在宣告部分宣告異常名。

語法:exception      exception;

其中:  exception  異常名

2.  使用pragmaexception_init語句將異常處理名字和oracle的錯誤**關聯起來.

語法:pragma   exception_init ( exception, error_number ) ;

其中:  exception  先前宣告的異常名

error_number  標準oracle 錯誤**

3.  在相應的異常處理例程中引用已宣告的異常。

關鍵字 pragma (偽指令pseudoinstructions)表示語句是乙個編譯指令,在執行pl/sql塊時並不處理該語句。在pl/sql塊中,乙個編譯指令exception_init告訴編譯器將乙個異常處理的名字和乙個oracle錯誤**聯絡起來。

declare

e_emp_cons exception;

pragma exception_init(e_emp_cons,

-00001

);

begin

insert

into

emp

select

*from

emp;

exception

when e_emp_cons then

dbms_output.put_line(

'違反唯一性約束

');

end;

4.3 自定義異常在pl/sql塊的宣告部分宣告

declare

name

varchar(10

);  ex exception;

--定義異常ex

begin

select dname into name from dept where deptno='10

';dbms_output.put_line(name);

if name<>'hr

'then

raise ex;

--觸發異常

endif

;exception

when ex then

dbms_output.put_line(

'10號部門不是hr

'); --

處理異常

end;

當子塊自己處理異常時,它可以正常終止,並且在子塊的end語句之後可以立即將控制交給外部塊。

然而,如果 pl/sql出現了異常,但當前塊中沒有針對該異常的處理機,就會尋找外部塊中有沒有處理機,如果所有的外部塊都不能處理這個異常,則就會在宿主環境中出現未經處理的異常。

當把異常傳播給外部塊,則當前塊中的等待執行**都不再被執行。

這種方法的優點就是內部塊僅處理自己特有的錯誤,而將一般的異常處理留給外部塊。

ORACLE 異常處理

一 開發pl sql程式時,需要考慮到程式執行時可能出現的各種異常,當異常出現時,或是中斷程式執行,或是使程式從錯誤中恢復,從而繼續執行。常用的異常型別有 no data found 沒有發現資料 too many rows select into 語句查詢結果有多個資料行 others 可以捕捉所...

Oracle 異常處理

異常處理 處理程式不可意料的操作,防止程式崩潰,起到友好提示 語法 exception when 異常型別 then 異常處理 異常型別 處理相關的異常 others 處理所有的異常 no data found 沒有找到資料 too many rows 返回資料行數過多自定義異常 實行彈窗的方式提示...

Oracle 異常處理

oracle 異常處理 異常是oracle資料庫中的pl sql 執行期間出現的錯誤。無論任何時候,當pl sql引擎執行 時,都可能會遇到異常。當產生異常時,pl sql會將程式控制轉到程式塊的異常處理部分。如果一場沒有被處理,那麼異常就會傳播,或者發往程式的呼叫者。如果使用者建立的程式塊沒有異常...