ORACLE – PL/SQL – EXCEPTION HANDLING – İSTİSNA YAKALAMA

Merhabalar ,

Bu yazımızda Oracle da Exception ları hataları yakalama işlemlerini nasıl yapıldığından bahsedeceğim.

Oracle da hatalar için şunu söyleyebiliriz , Önceden tanımlanmış (Predefined)ve tanımlanmamış (Non Predefined) hatalar mevcuttur , yani bazı hatalar tanımlı isimleri varken bazıları için sadece kodları bulunmaktadır , yani her hata için özel isimlendirme bulunmamaktadır .

Exception Handling : Nesne yönelimli programlama dillerinde istisnai bir durumu, beklenmedik bir olayı algılayıp buna karşı bir kod parçasının çalışmasıdır.

Önceden Tanımlanmış (Predefined) hatalar : 

TOO_MANY_ROWS = birden fazla satır döndüğünde dönecek hata gibi.

Bir örnekle bu hatayı alıp , bu hata olduğunda istediğimiz mesajı yazdıralım.

--

DECLARE 
   lname VARCHAR2(20);
BEGIN
   SELECT Last_Name INTO lname FROM Employees WHERE First_Name = 'John';
   DBMS_OUTPUT.PUT_LINE('John un soyadı :' || lname);--ekrana yazdırma komutu.
EXCEPTIOPN
   WHEN TOO_MANY_ROWS THEN
       DBMS_OUTPUT.PUT_LINE('Hata oluşunca ekrana yazdırmak istediğimiz mesaj');--ekrana yazdırma komutu.
END;

--

Bu örnekte John adına sahip kişinin adını yazdıracaktık fakat birden fazla kişinin adı john olduğunda , EXCEPTION hata bloguna girdi kodumuz orada da CASE WHEN yapısı ile eğer birden fazla satır hatası ise istediğimiz mesajı yazdırdık.

Başka bir örnek daha yapalım , tanımlanmış hatalardan bir başkası da ZERO DIVIDE Exception ı tanımlanmış yani sıfıra bölme hatası.

--

BEGIN
   DBMS_OUTPUT.PUT_LINE(1/0);
EXCEPTION
   WHEN ZERO_DIVIDE THEN
       DBMS_OUTPUT.PUT_LINE('Sıfıra bölme Hatası.');
       DBMS_OUTPUT.PUT_LINE(SQLEERM || ' - ' || SQLCODE);-- Hatanın mesajı ve kodunu göstermek istersek
END;


--

screenshot_16

Aynı şekilde diğer tanımlı Hatalar için exceptions handling yapılarak istediğimiz mesajı veya işlemleri yaptırabiliriz. diğer tanımlı hata mesajları listesi: Oracle Tanımlanmış Hata Listesi

screenshot_17

Önceden Tanımlanmamış (Non Predefined) hatalar : 

Bu hatalar tanımlanmış hatalar dışında kalan hatalardaır ve binlerce bu şekilde hata nulunur ve hata kodları listedinde mevcuttur , tanımlanmamış hataları exception handling yapma ihtiyacımız doğduğunda , yani bu hatalardan biri meydana geldiğinde kodumuz istediğimiz işlemlerini yapması için , hata kadunu kendimiz tanımlayacağız ve daha sonra EXCEPTION kısmında Önceden tanımlanmış hata kodları gibi kullanacağız. Örnek üzerinde açıklayayım :

-1400 hatası : Cannot insert NULL hatasıdırı , Null değer insert edilemez demektir. peki bu hata meydana geldiğinde istediğimiz bir mesajı ekrana yazdırmak için bu hata kodunu kendi verdiğimiz isimde bir EXCEPTION tanımlayıp daha sonrada kullanacağız.

Tanımlayacağımız Hata adına INSERT_EXCEP olarak tanımlayacağım. PRAGMA EXCEPTION_INIT kodu ile de -1400 kodunu bu hatayı işaret ettiğimi belirteceğim.

Örn:

--

DECLARE
   INSERT_EXCEP EXCEPTION;--exception ımızı tanımladık
   PRAGMA EXCEPTION_INIT(INSERT_EXCEP , -1400); -- hata kodunu hata adı ile işaretledik.
BEGIN
   INSERT INTO Departments(Department_ID,Department_Name)
   VALUES (280 , NULL);
EXCEPTION
   WHEN INSERT_EXCEP THEN -- -1400 hatasını artık INSERT_EXCEP olarak yakalıyabiliriz.
   DBMS_OUTPUT.PUT_LINE('INSERT İşlemi Sırasında Hata Meydana Geldi.');
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--

Şeklinde kullanabiliriz ,

Bu yazımda anlatacaklarım bu kadar , umarım faydalı olmuştur , İyi Çalışmalar. 🙂 — Salih ŞEKER

Print Friendly, PDF & Email

You may also like...

Bir cevap yazın