DEV Community

Cover image for 🎯 PL/SQL’de Exception Handling (Hata Yönetimi)
Cem GÖKSU
Cem GÖKSU

Posted on

🎯 PL/SQL’de Exception Handling (Hata Yönetimi)

PL/SQL’de Exception Handling (Hata Yönetimi)

PL/SQL geliştirirken, beklenmeyen hatalarla (exceptions) karşılaşmak kaçınılmazdır. Ancak doğru hata yönetimi, uygulamanın stabil, güvenilir ve hata toleranslı olmasını sağlar.

Bir PL/SQL mülakatında, "PL/SQL’de Exception Handling nasıl yapılır?", "User-Defined Exception (Kullanıcı Tanımlı Hata) nasıl oluşturulur?" veya "EXCEPTION blokları nasıl çalışır?" gibi sorularla karşılaşabilirsin.

Bu makalede, PL/SQL’de hata yönetimi (Exception Handling) kavramını, türlerini ve en iyi uygulama yöntemlerini inceleyeceğiz.

  1. PL/SQL’de Exception Handling Nedir?

📌 Exception Handling (Hata Yönetimi), çalışma zamanı hatalarını yakalayıp programın çökmesini önlemek için kullanılır.

📢 Neden Kullanılır?
✔ Programın beklenmedik bir hata yüzünden durmasını engeller.
✔ Kullanıcıya daha açıklayıcı hata mesajları sunar.
✔ Uygulamanın güvenilirliğini artırır.

PL/SQL’de hata yakalama işlemi EXCEPTION bloğu kullanılarak yapılır.

📌 Temel Exception Yapısı

BEGIN
-- Ana kod bloğu
EXCEPTION
WHEN <HATA_TIPI> THEN
-- Hata yönetimi
END;

  1. PL/SQL Exception Türleri

PL/SQL’de üç ana Exception türü bulunur:
1️⃣ Predefined Exceptions (Ön Tanımlı Hatalar)

Oracle tarafından tanımlanmış, sık karşılaşılan standart hata türleridir.

🔹 Örnekler:

Image description

📌 Kullanımı:

BEGIN
SELECT ad INTO v_ad FROM hastalar WHERE id = 99999; -- Bu ID yoksa hata verir
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Kayıt bulunamadı.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Birden fazla kayıt döndü.');
END;

2️⃣ User-Defined Exceptions (Kullanıcı Tanımlı Hatalar)

Özel hata senaryoları için kendi Exception’larımızı tanımlayabiliriz.

📌 Kullanımı:

DECLARE
hasta_yok EXCEPTION; -- Kullanıcı tanımlı hata
PRAGMA EXCEPTION_INIT(hasta_yok, -20001); -- Özel hata kodu atama
BEGIN
IF NOT EXISTS (SELECT 1 FROM hastalar WHERE id = 101) THEN
RAISE hasta_yok; -- Hata fırlat
END IF;
EXCEPTION
WHEN hasta_yok THEN
DBMS_OUTPUT.PUT_LINE('Özel hata: Hasta bulunamadı.');
END;

Önemli Nokta:

RAISE <HATA_ADI> komutu ile hata fırlatılabilir.
PRAGMA EXCEPTION_INIT ile Oracle hata kodlarına özel hata tanımlanabilir.
Enter fullscreen mode Exit fullscreen mode

3️⃣ Named System Exceptions (İsimlendirilmiş Oracle Hataları)

Oracle’ın belirli hata kodlarını isimlendirmek için kullanılır.

📌 Kullanımı:

DECLARE
duplicate_entry EXCEPTION;
PRAGMA EXCEPTION_INIT(duplicate_entry, -00001); -- ORA-00001 = Unique Constraint Hatası
BEGIN
INSERT INTO hastalar(id, ad) VALUES (1, 'Ali'); -- Eğer ID 1 zaten varsa hata verecek
EXCEPTION
WHEN duplicate_entry THEN
DBMS_OUTPUT.PUT_LINE('Tekrarlanan veri hatası!');
END;

  1. EXCEPTION Kullanımı ve Örnek Senaryolar 📌 Temel Exception Kullanımı

BEGIN
INSERT INTO hastalar(id, ad) VALUES (101, 'Ali');
EXCEPTION
WHEN OTHERS THEN -- Tüm hataları yakalar
DBMS_OUTPUT.PUT_LINE('Bir hata oluştu: ' || SQLERRM);
END;

📢 SQLERRM, hata mesajını döndürür.
📌 Birden Fazla Exception Kullanımı

BEGIN
UPDATE hastalar SET ad = 'Mehmet' WHERE id = 500; -- Eğer 500 ID yoksa hata
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Hata: Kayıt bulunamadı.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Hata: Birden fazla kayıt döndü.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Bilinmeyen bir hata oluştu.');
END;

📌 RAISE ile Hata Fırlatma

📌 Eğer belirli bir hata durumunda özel bir hata fırlatmak istiyorsan RAISE komutunu kullanabilirsin.

DECLARE
hasta_bulunamadi EXCEPTION;
BEGIN
SELECT ad INTO v_ad FROM hastalar WHERE id = 99999;
IF v_ad IS NULL THEN
RAISE hasta_bulunamadi;
END IF;
EXCEPTION
WHEN hasta_bulunamadi THEN
DBMS_OUTPUT.PUT_LINE('Hasta bulunamadı!');
END;

  1. PL/SQL Exception Handling ile İlgili Gelebilecek Sorular

PL/SQL Exception Handling ile ilgili şu sorular karşına çıkabilir:
Soru 1: Predefined ve User-Defined Exception farkı nedir?

Cevap:

Predefined Exception: Oracle tarafından tanımlanmış hata türleri (NO_DATA_FOUND, ZERO_DIVIDE).
User-Defined Exception: Geliştirici tarafından tanımlanan özel hata türleri.
Enter fullscreen mode Exit fullscreen mode

Soru 2: OTHERS Exception ne yapar? Kullanımı önerilir mi?

Cevap:

WHEN OTHERS tüm hata türlerini yakalar, ancak spesifik hata yönetimi önerilir.
Güvenlik ve hata ayıklama açısından, belirli hata türleri için ayrı WHEN blokları kullanmak daha iyidir.
Enter fullscreen mode Exit fullscreen mode

Soru 3: Bir PL/SQL bloğunda nasıl özel hata oluşturabiliriz?

Cevap:

DECLARE my_exception EXCEPTION;
RAISE my_exception;
Enter fullscreen mode Exit fullscreen mode
  1. Sonuç

PL/SQL’de Exception Handling, hataları yöneterek uygulamanın güvenilirliğini ve dayanıklılığını artırır.

🎯 Özetle:
✅ EXCEPTION bloğu ile hatalar yakalanır.
✅ Predefined ve User-Defined Exception türleri vardır.
✅ RAISE ile özel hatalar oluşturulabilir.
✅ WHEN OTHERS tüm hataları yakalar, ama dikkatli kullanılmalıdır.

Top comments (0)