SQL Server Hata Yakalama Mekanizmasi (TRY-CATCH)

SQL Server Hata Yakalama Mekanizmasi (TRY-CATCH)

Bu makalemizde T-SQL de try catch ile hata yakalama mekanizmasinin temellerini anlamaya çalisacagiz. Programlama dillerinde oldugu gibi t-sql de de try catch bloklari olusan hatayi yakalamamizi saglar ve olusan hata hakkinda bilgi sahibi olmamiza imkan verir.

Hata yakalamak için TSQL’de asagidaki örnek syntax yapisini kullaniriz.

BEGIN TRY
    SELECT a = 1
    SELECT b = 1/0
    SELECT c = 3
END TRY
BEGIN CATCH
    PRINT 'Hata Mesaji'
END CATCH

Yukaridaki sorgu sonucu asagidaki gibi bir sonuç döner

a
-----------
1

(1 row(s) affected)

b
-----------

(0 row(s) affected)

Hata Mesaji

TRY CATCH kullanildiginda, bir hata olustugu zaman bu hata istemciye geri döndürülmez, hata CATCH blogu içinde islenir.

.

Hata Fonksiyonlari

CATCH blogu içinde kullanabilecegimiz ve olusan hata hakkinda bilgi alabilecegimiz bir çok fonksiyon var.

BEGIN TRY

    SELECT Sonuc = 5/0
END TRY
BEGIN CATCH
    SELECT [Hata_Satiri] = ERROR_LINE(),
           [Hata_Sayisi] = ERROR_NUMBER(),
           [Hata_Onemi] = ERROR_SEVERITY(),
           [Hata_Durumu] = ERROR_STATE()

    SELECT [Hata_Mesaji] = ERROR_MESSAGE()
END CATCH

Sonuç

-----------

(0 row(s) affected)

Hata_Satiri Hata_Sayisi Hata_Onemi  Hata_Durumu
----------- ----------- ----------- -----------
2           8134        16          1

(1 row(s) affected)

Hata_Mesaji
-----------------
Divide by zero error encountered.

(1 row(s) affected)

CATCH blogunda kullanilan fonksiyonlar ve açiklamalari su sekilde;

  • ERROR_NUMBER : Olusan hata numasi
  • ERROR_MESSAGE : Olusan hataya ait hata mesaji.
  • ERROR_LINE : Hatanin hangi satirda olustugunu gösterir.
  • ERROR_SEVERITY : Hatanin önem düzeyini gösterir. CATCH blogu önem seviyesi 11 ve üzerinde olan hatalari yakalar. 11 – 16 arasinda olan hatalar kullanici veya kod hatasidir. 17-25 arasinda olan hatalar ise yazilim ve donanimdan kaynaklanan hatalardir.
  • ERROR_PROCEDURE : Eger hata bir stored procedure içinde olustu ise onun adini döndürür.
.

Stored Procedure içinde olusan hatalari yakalamak

TRY CATCH blogu çagrilan bir stored procedure içnide olusan hatayida yakalayabilir. Bir örnek verecek olursak.

BEGIN TRY
    EXEC Ornek_Procedure
END TRY
BEGIN CATCH
	SELECT Hata_Satiri = ERROR_LINE(),
		   Procedure_Adi = ERROR_PROCEDURE()
	SELECT [Hata_Mesaji] = ERROR_MESSAGE()
END CATCH

Sonuç

Hata_Satiri Procedure_Adi
----------- -------------------
3           NULL

(1 row(s) affected)

Hata_Mesaji
--------------------
Could not find stored procedure 'Ornek_Procedure'.

(1 row(s) affected)

Transaction ile Hata Yakalama

Hata yakalama mekanizmasi Transaction islemlerinde de oldukça faydalidir. Bu tür islemleri asagidaki gibi yapabiliriz.


BEGIN TRY
    BEGIN TRANSACTION
       INSERT INTO dbo.DimAccount
       (ParentAccountKey)
        values('deneme')   

    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    if @@TRANCOUNT>1ROLLBACK TRANSACTION
    select Hata_Mesaji = ERROR_MESSAGE()
END CATCH

Sonuç

Hata_Mesaji
------------------------
Conversion failed when converting the varchar value 
'deneme' to data type int.

(1 row(s) affected)

Msg 3998, Level 16, State 1, Line 1
Uncommittable transaction is detected at the 
end of the batch. The transaction is rolled back.
.

3 thoughts on “SQL Server Hata Yakalama Mekanizmasi (TRY-CATCH)

  1. Hocam elinize saglik, çok güzel olmus. fonksiyon kullandiginiz yerde (ERROR_MESSAGE), fonksiyonlari küçük harflerle de yazabilir miyiz acaba? Yani t-sql’de büyük küçük harf duyarliligi var mi? 

oguzhan için bir cevap yazın Cevabı iptal et

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