|
SQL Server 2005 de Hata Kontrolü |
|
|
|
|
Yazar Tuba ÇEBİ
|
|
Salı, 18 Mart 2008 |
SQL Server’in eski sürümlerinde herhangi bir aşamada hata olup olmadığını anlayabilmemiz için @@Error ün değerini basamak basamak kontrol etmek gerekmektedir...
SQL Server 2005 de ise, TRY-CATCH yapısı kullanılmaktadır. Bu yapı ile daha kolay hata yakalanmasına imkan vererek yazılım geliştiricilerin daha verimli çalışmasına imkan sağlamaktadır.
Yapısı Try ve Catch bloklarından oluşmaktadır. Eğer Begin Try bloğunda bir hata yakaladıysa doğrudan Begin Catch bloğuna yönlendirilir. TRY bloğu içerisinde SQL’in eski sürümlerinde olduğu gibi her adımda hata olup olmadığının kontrol edilmesi yerine CATCH bloğu içerisinde çeşitli önlemler alarak hatayı yakalamak mümkündür…
RAISERROR (’Some Error!’, 11, 1)
PRINT CAST(ERROR_NUMBER() AS VARCHAR(10)) + ‘numaralý hata’
Bu örnekteki RAISERROR fonksiyonu bir hata meydana geldiği zaman o hatayı tanımlamak için kullanılır.
Sys.messages sisteme kayıtlı, hazır olarak kullanılan toplam 70.000 kadar hata mesajı barındırır. Bu mesajlar, sistemde hazır olan fonksiyonlar ve stored procedureler tarafından kullanılır. RAISERROR (’Some Error!’, 11, 1) satırındaki 11 nolu error’un anlamı: kullanıcının düzeltebileceği türden bir hatadır. ßurada Try ßloğunda 11 nolu hatayı yakalıyor ve Catch bloğuna yönlendiriyor ve oluşan hatanın numarası ERROR_NUMBER() fonksiyonu aracılığı ile okuyoruz.
Bu tarzdaki birkaç fonsiyonun döndürdüğü değerleri sırayla öğrenelim:
ERROR_MESSAGE() : Hata mesajı metni.
ERROR_SEVERITY() : Hatanın dışa dönük kritiklik durumu.
ERROR_STATE() : Hatanın sisteme dönük kritiklik seviyesi.
ERROR_PROCEDURE() : Hataya neden olan procedure.
ERROR_LINE() : Hataya neden olan satır.
ERROR_NUMBER() Hangi hata RAISE edildi ad-hoc veya sys.message tablosundaki hata kodu.
Statement Nesting bir yapıya uygun olarak TRY-CATCH blokları iç içe de kullanılabilirler. Sonuc itibariyle daha belirli ve alt bölümlerden hatalara karşı etkin zırhlı bir yapı kullanılabilir :)
So,see you...
Görüntüleme sayısı: 162
Yaptığınız yorumlar için teşekkür ederim.
|