Son Haberler
Anasayfa / Yazılım / SQL / RAISERROR Kullanımı

RAISERROR Kullanımı

TRY CATCH ile yakalanamayan hataları kullanıcıya bildirebilmek için TRY CATCH yapısı içinde RAISERROR fonksiyonunu kullanabiliriz. Ayrıca bu fonksiyon ile kullanıcıya istemiş olduğumuz mesajı verme hakkına da sahibiz. Örneğin veritabanında olmayan bir tabloyu güncellemeye çalıştığımızda TRY CATCH yapısında sorunun nedenini kullanıcıya bildiremeyiz. Ancak eğer TRY CATCH yapısı içinde RAISERROR kullanırsak ve olası hataları listelersek hata sebebini belirtebiliriz.

RAISERROR için kullanım şekli aşağıdaki gibidir:

RAISERROR(‘Verilecek Hata Mesajı’,ERROR_SEVERITY, ERROR_STATE)

Burada yer alan ERROR_SEVERITY ve ERROR_STATE konusunda çok detaylı bilgiyi bu yazıda vermeyeceğim, genel geçer şekilde açıklayacağım. Üstte RAISERROR kullanımında 3 parametre verdim ancak bir çok parametre alabilen bir fonksiyondur, şu anda bizim için gerekli olan hali bu. Bunu da ek bilgi olarak belirtmek istiyorum. Ayrıca sistem üzerinde var olan sp_addmessage stored proceduru üzerinde de istediğimiz mesajı oluşturabiliriz.

Şimdi bir kaç örnekle yazımıza devam edelim: (Örneklerimi AdventureWorks2012 veritabanı üzerinde yapıyorum)

IF EXISTS(SELECT * FROM sys.messages WHERE message_id = 50002) BEGIN
EXEC sp_dropmessage 50002;
END;
PRINT 'Özel mesajımız'
EXEC sp_addmessage 50002, 16,
N'customer missing';
IF NOT EXISTS(SELECT * FROM Sales.Customer WHERE CustomerID = -1)
BEGIN RAISERROR(50002,16,1);
END

RAISERROR ile istemiş olduğujmuz mesajı yazdırabiliriz. Burada ilgili mesaj koduna ilgili mesajımı eşitliyorum. Önce özel mesajımı oluşturdum, daha sonra da özel mesajımı hata kodu ile eşleştirip, hata mesajımı yazdırdım. Burada TRY CATCH içinde RAISERROR metodumu kullanmadım. Bir sonraki örneğimde öyle yapacağım. Şimdi bu örneğimde bir takım rakamlar görüyorsunuz. Bu konuda çok detaya girmeyeceğim, çünkü konumuz bu değil ama internet üzerinde konu ile ilgili araştırmalar yapabilirsiniz. Aşağıdaki linki de inceleyebilirsiniz.

http://technet.microsoft.com/en-us/library/ms164086.aspx

2013121901

Birde RAISERROR metodunu TRY CATCH yapısı içinde kullanalım.

BEGIN TRY PRINT 3/0;
END TRY 
BEGIN CATCH
IF ERROR_NUMBER() = 8134 BEGIN
RAISERROR('Hiç bir sayı sıfıra bölünemez, hata oluştu',16,1);
END;
END CATCH;

Bu örneğimde de tam sayıyı 0’a bölmeye çalıştım ama hata alıyorum. Hata da aşağıdaki gibi :

2013121902

Görüleceği üzere standart olarak 50000 kodu ile yazılıyor. Level 16’da hatanın seviyesini belirtir. Hata seviyesi 1 ve 25 arasında olabilir. Standartta 11 ve altı sadece bilgilendirme hatası olarak kabul edilir. 16 koduna sahip olanlar genel hatalar kabul edilir. Üstte vermiş olduğum linkten detayı inceleyebilirsiniz.

Bir cevap yazın

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