Her programlama dilinde oldugu gibi Oracle ‘ın prosedürel veritabanı programlama dili olan PL/SQL de de gerek derleme sırasında(compile time), gerekse programın çalışması esnasında(run time) hata durumu ortaya çıkabilir.Bu yazıda bunların tespit edip yakalama ve program akışını buna göre düzenlemeye yönelik kısa bilgiler bulacaksınız.
PL/SQL de işlemi gercekleştirecek kod parcacıkları fonksiyon, procedür ya da script seklinde bir kod blogu ile olabilir.Hepsinin ortak yanı :
declare
–gerekirse değişken tanımları
begin
   …………
   ………….
   ……………
    ……………….
end;
şeklinde bir bloktan oluşmalarıdır.NOT : Fonksiyon ve prosedür için örnekler şu şeklide verilebilir :
 
Fonksiyon örneği :
function  fonksiyonXXX(param1 varchar2,param2 number….) return aDataType is
–gerekirse değişken tanımları
begin
    …………
    ………….
    ……………
    ……………….
   return aDataType;
end fonksiyonXXX;
Procedür örneği :
procedure procedurXXX (param1 varchar2,param2 number….) is
–gerekirse değişken tanımları
begin
   …………
   ………….
   ……………
   ……………….
end prosedurXXX;
Türü ne olursa olsun hata yönetimi yapmak, hatayı yakalamak için her begin-end; bloğu arasında bu blokta olusacak hata için “exception” anahtar kelimesi kullanılmalıdır.
declare
begin
    ….
    …..
    ….
    …
    exception
         ………………
end;
“exception” kısmında “end;” sonuna kadar olan kısımda, alınan birden fazla hatayı yakalamak mümkün.Bunun için “when” anahtar kelimesini kullanılır.
begin
   ……..
   ……….
   ………
   exception
         when exception1 then
                   ———gerekli kodlar
                   ——————–
         when exception2 then
                   ———gerekli kodlar
                   ————–
         when others then
                     ————       
          .
          .
end;
“exception1, exception2, …exceptionN” önceden tanımlı bir hata olabileceği gibi ,tanımsız olan herhangibir hata ya da kullanıcının tanımladıgı bir hata da olabilir.Önceden tanımlı hatalara örnek olarak
no_data_found 
to_many_rows 
zero_divide 
…..                        
verilebilir.Bazı önceden tanımlı hatalar ve kodları aşağıda verilmiştir.
 
Exception Oracle Error SQLCODE Value 
ACCESS_INTO_NULL ORA-06530 -6530 
CASE_NOT_FOUND ORA-06592 -6592 
COLLECTION_IS_NULL ORA-06531 -6531 
CURSOR_ALREADY_OPEN ORA-06511 -6511 
DUP_VAL_ON_INDEX ORA-00001 -1 
INVALID_CURSOR ORA-01001 -1001 
INVALID_NUMBER ORA-01722 -1722 
LOGIN_DENIED ORA-01017 -1017 
NO_DATA_FOUND ORA-01403 +100 
NOT_LOGGED_ON ORA-01012 -1012 
PROGRAM_ERROR ORA-06501 -6501 
ROWTYPE_MISMATCH       …………………….. ORA-06504       ……………………. -6504       ………………… 
Önceden tanımlı hata kodları ile tanımı olmayan diger hatalarda muhakkak bir hata kodu(ORA-xyzwt) bulunmaktadır.Belirli bir hatayı değilde alınan herhangibir ya da belirtilmeyen başka hataları yakalamak için “when” den sonra “others” kullanılır.
NOT : Oracle , hata oluştugu anda bu hataya ait hata kodunu “sqlcode” değişkenine, hata acıklamasını da “sqlerrm” değişkenine otomatik olarak atar.Bunlar gerekirse okunarak kullanılabilir.Kullanıcı tanımlı hatalar için de öncelikte hata değişkeni tanımı yapılmalıdır.Bunun herhangibir veri tipi tanımlamadan farkı yoktur.
declare
something_wrong exception;
declare
         if(…) then
                   raise someting_wrong;
         …………….
         ………
         exception
                when something_wrong then
                   –gerekli işlemler…
               when  others then
                   –gerekli işlemler….
end;
“exception” bloğuna düşen hatada bir takım işlemler yapılabileceği gibi bu PL/SQL kodunu çağıran yere de bir hata fırlatmak isteyebiliriz.(throw exception).Bunun içinde “raise _applicaion_error(errorID, errorDesc)” kullanılır.“errorID” ve “errorDesc” alanlarını kullanıcı belirler.”errorID” [-20000,-20999] arasında bir değer olmalıdır.”errorDesc” alanıda en fazla 2000 karakterlik “varchar2” veri tipinde açıklama yazılabilir.
Örneğin bir prosedürümüz olsun ve bu prosedür basitçe gönderilen parametrenin 1000’den büyük olup olmadıgını kontrol etsin.Büyük ise  yukarı hata versin.
procedure prc_checkValue(p_vlaue number) is
begin
         if(p_value > 1000) then
                   raise_application_error(-20010,’Value is too large);
end;
Bunu yapmanın bir başka yoluda bir hata tanımlayıp bu hatayı “raise etmek :
procedure prc_checkValue(p_vlaue number) is
too_large exception;
begin
         if(p_value > 1000) then
                   raise too_large;
         exception
         when too_large then
                   raise_application_error(-20010,’Value is too large);
end;
 
 
Hello, i think that i saw you visited my weblog so i came to “return the favor”.
YanıtlaSilI'm attempting to find things to enhance my site!I suppose its ok to use a few of your ideas!!
Also visit my blog; cellulite treatment reviews
off white hoodie
YanıtlaSillouboutin shoes
nike air max 2018
yeezy
supreme
kd shoes
balenciaga
air max
jordan shoes
authentic jordans
xiaofang20191220