PL SQL每日一題 異常處理 WHEN子句

2021-08-27 07:49:40 字數 1538 閱讀 2113

題目:

捕獲除數為零的錯誤("ora-01476: divisor is equal to zero")並且在這種情況下顯示 "bad division"

所有的其他異常都必須原封不動地傳播到呼叫塊

換句話說,如果我加入下列異常處理部分然後執行如下**塊:

begin

plch_proc (0);

plch_proc (-1);

exception

when others

then

dbms_output.put_line ('all handled');

end;

/

隨後我應該在螢幕上看到如下輸出:

bad division

all handled

(a)

exception

when 'ora-01476'

then

dbms_output.put_line ('bad division');

(b)exception

when zero_divide

then

dbms_output.put_line ('bad division');

(c)exception

when others

then

if sqlcode = -01476

then

dbms_output.put_line ('bad division');

else

raise;

end if;

(d)exception

when others

then

if sqlcode = 1476

then

dbms_output.put_line ('bad division');

end if;

(e)exception

when others

then

if sqlcode = -1476

then

dbms_output.put_line ('bad division');

end if;

答案:

選擇:bc

a: 語法錯誤,when後面必須跟著已定義好的異常,可以是系統定義或自定義

b: zero_divide是系統定義異常

c: 通過when others捕獲了所有異常並對其中一種錯誤**進行處理,其他的繼續丟擲,所以上層還能捕獲到其他異常

d: 錯誤**寫得不對

sqlcode一般返回負數,處理這幾種情況:

① 沒有異常(返回0)

② 使用者自定義異常而且沒有用exception_init和乙個錯誤**關聯

此時返回1使用者自定義異常而且沒有用exception_init和乙個錯誤**關聯(此時返回1)

③ no_data_found(sqlcode返回100)

e: 和c的區別是沒有用raise繼續丟擲,所以上層無法捕獲

PL SQL每日一題 含有NULL的IF條件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ...

PL SQL每日一題 含有NULL的IF條件

哪些選項在執行之後會顯示 hello earth a declare l total number l name varchar2 10 pl sql begin if l name pl sql or l total 100 then dbms output.put line hello eart...

PL SQL每日一題 含有NULL的IF條件

哪些選項在執行之後會顯示 hello earth a declare l total number l name varchar2 10 pl sql begin if l name pl sql or l total 100 then dbms output.put line hello eart...