Propagation Of Exceptions In PL/SQL

Posted by NosaLee in Database on 17-05-2012.

Birçok dilde olduğu gibi PL/SQL’de de exception handling üzerinde dikkatle durulması gereken bir olaydır. Bu hem son kullanıcıları hem de uygulama geliştiricileri yakından ilgilendirir. Son kullanıcıya uygun mesajın gösterilmesi, hata içeriğine dair detaylı bilgilerin uygulama geliştiricilere bildirilmesi gerekir.

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(‘<>Start’);

<>
BEGIN
dbms_output.put_line(‘    <>Start’);

<>
BEGIN
dbms_output.put_line(‘        <>Just Before custom_exc’);
RAISE custom_exc;
dbms_output.put_line(‘        <>Just After custom_exc’);
EXCEPTION
WHEN zero_divide THEN
dbms_output.put_line(‘        <>Divide by zero exception occured!!!’);
WHEN OTHERS THEN
dbms_output.put_line(‘        <>Others exception occured!!!’);
END inner_in_label;

dbms_output.put_line(‘    <>Just Before zero_divide’);
i := 3 / 0;
dbms_output.put_line(‘    <>Just After zero_divide’);
dbms_output.put_line(‘    <>End’);

EXCEPTION
WHEN custom_exc THEN
dbms_output.put_line(‘    <>custom_exc exception occured!!!’);
WHEN zero_divide THEN
dbms_output.put_line(‘    <>zero_divide’);

END inner_label;

dbms_output.put_line(‘<>End’);

END outer_label;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(‘Others exception occured!!!’);

END;

Çıktı ise şöyledir:

Program Start
<>Start
<>Start
<>Just Before custom_exc
<>Others exception occured!!!
<>Just Before zero_divide
<>zero_divide
<>End

Original Address: http://ora-exp.blogspot.jp/2006/09/propagation-of-exceptions-in-plsql_17.html

Post a comment