Son Haberler
Anasayfa / Yazılım / SQL / Hata Yakalama Uygulamaları

Hata Yakalama Uygulamaları

Örneklerimde AdventureWorks2012 veritabanını kullanacağım.

Örnek : HumanResources.Department tablosuna çift kayıt girmeye çalışacağım. Buradaki hatayı yakalamak için @@ERROR fonksiyonunu kullanacağım.

DECLARE @HataNumarasi INT;
INSERT INTO HumanResources.Department(DepartmentID,Name,GroupName,ModifiedDate)
VALUES(1,'Engineering','Research and Development',GETDATE());
SET @HataNumarasi = @@ERROR;
IF @HataNumarasi > 0 BEGIN
PRINT @HataNumarasi;
END;

Şimdi örneğimde HataNumarasi adında INT tipinde bir değişken tanımladım. Ve HumanResources.Department tablosunda 1 nolu kayıt olduğunu biliyorum ama ben bilerek hatalı kod yazmak için tekrar 1 nolu satıra veri girişi yapmaya çalışıyorum. HataNumarası değişkenim ile birlikte @ERROR fonksiyonunu bağlıyorum. Eğer hata mevcut olursa geriye bu fonksiyon sonucunda 0’dan büyük bir sayı döner, bu durumu IF ile kontrol ediyorum. Eğer hata var ise 0’dan büyük sayı dönecek ve ben de bunu ekrana yazdırıyorum. Sonuç aşağıdaki gibi:

20131218004

Örnek : Bir üstteki örneğimdeki işlemi bu sefer TRY CATCH ile yapayım. Ama PRINT kısmında aynı zamanda hata numarasını, hata mesajını ve hata şiddetini yazdıralım. Kodlarımı şimdi düzenliyorum.

BEGIN TRY
INSERT INTO HumanResources.Department(DepartmentID,Name,GroupName,ModifiedDate)
VALUES(1,'Engineering','Research and Development',GETDATE());
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS HataNumarasi, 
ERROR_MESSAGE AS HataMesaji,
ERROR_SEVERITY AS HataSiddeti
END CATCH;

Bir önceki yazımda belirttiğim üzere TRY CATCH ile bu sefer hatayı yakalayamıyorum.

20131218005

Örnek : Bu sefer bir üstteki örneğim için TRY CATCH yapısı içinde hatayı kendi mesajımla yazdırmaya çalışayım. Bunun için RAISERROR kullanmam gerekiyor. Kodları yazarsak;

BEGIN TRY
INSERT INTO HumanResources.Department(DepartmentID,Name,GroupName,ModifiedDate)
VALUES(1,'Engineering','Research and Development',GETDATE());
END TRY
BEGIN CATCH
RAISERROR('Var olan satır üzerine veri girmeye çalıştınız',16,1);
END CATCH;

Sonuç :

20131218006

Görüleceği üzere kendi mesajımızı yazdırdık.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir