Birçok programlama dili exception handling i try catch blokları ile aşmaya çalışır. PL/SQL'de bu durum için exception blokları yazılır, hangi exception oluşmuşsa ona göre reaksiyon alınması sağlanır. Oluşan exception en iç bloktan en dış bloğa doğru fırlatılır. İlk bulunan exception bloğu içinde bu exception unun handle edilip edilmediğine bakılır. Eğer o exception için bir mekanizma yoksa ve global(others) bir mekanizma da tanımlı değilse bir üst bloğa doğru hareket eder. Eğer bir yerde handle edildiyse, ondan sonraki bloktan akış devam eder.
Aşağıda bu durumu modelleyen bir senaryo bulunmaktadır. İçiçe bulunan 4 blok içinden exceptionlar oluşturulmuş, bunların fırlatılma durumları gözlenmiştir.
DECLARE
custom_exc EXCEPTION;
i NUMBER;
BEGIN
dbms_output.put_line('Program Start');
<
BEGIN
dbms_output.put_line('<
<
BEGIN
dbms_output.put_line(' <
<
BEGIN
dbms_output.put_line(' <
RAISE custom_exc;
dbms_output.put_line(' <
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line(' <
WHEN OTHERS THEN
dbms_output.put_line(' <
END inner_in_label;
dbms_output.put_line(' <
i := 3 / 0;
dbms_output.put_line(' <
dbms_output.put_line(' <
EXCEPTION
WHEN custom_exc THEN
dbms_output.put_line(' <
WHEN zero_divide THEN
dbms_output.put_line(' <
END inner_label;
dbms_output.put_line('<
END outer_label;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Others exception occured!!!');
END;
Çıktı ise şöyledir:
Program Start
<
<
<
<
<
<
<
No comments:
Post a Comment