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.
- 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;
- 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:
📌 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.
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;
- 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;
- 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.
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.
Soru 3: Bir PL/SQL bloğunda nasıl özel hata oluşturabiliriz?
Cevap:
DECLARE my_exception EXCEPTION;
RAISE my_exception;
- 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)