Makale Özeti

Bu yazımızda SQL Server 2005 ile birlikte gelen T-SQL Exception Handling kavramını ele alacağız.

Makale




SQL Server 2005 T-SQL Exception Handling

Structured exception handling, birçok programlama dilinde exceptionları yakalamak ve yönetmek amacıyla kullandığımız bir özellikti. SQL 2005 ile beraber artık T-SQL sorgularımızı da exception handling blokları arasında yazabileceğiz. Önceki sürümlerde hataları yakalamak için @@ERROR gibi özelliklerden faydalanarak hata oluşmuş ise transaction’lardan rollback yapabiliyor ve işleme son verip RAISEERROR ile hata uyarısı çıkarabiliyorduk. Şimdi daha yapısal ve sağlam bir exception handling özelliğimiz var.

Klasik exception handling blokları Try.. Catch.. Finally yapılarından oluşur. Try içinde yaptırmak istediğimiz ana işlemleri yazıp, hata durumunda Catch blokuna düşürmeyi ve son işlemleri de (memory release vs) Finally bloku içinde tamamlamayı amaçlarız. Aynı mantık artık SQL kod parçalarımız için de geçerli olacak. Syntax özelliği ,

BEGIN TRY
    { sql_statement | statement_block }
END TRY
BEGIN CATCH
    { sql_statement | statement_block }
END CATCH

SQL 2005 üzerinde try catch bloklarını kullanabilmek için herşeyden once SET XACT_ABORT ON ifadesi çalıştırılmalıdır. SQL 2005 , yeni getirdiği bazı özellikleri default olarak çalışır durumda bırakmadığından dolayı böyle bir kod parçası çalıştırmak gerekiyor. (.NET CLR entegrasyonu da default olarak açık değildir, elle .NET CLR Enabled kod cümlesi çalıştırmak gerekmektedir.)

USE AdventureWorks
SET XACT_ABORT ON
BEGIN TRY
   BEGIN TRAN
      INSERT INTO dbo.DataTable VALUES (@a, @b)
   COMMIT TRAN
END TRY
BEGIN CATCH
   ROLLBACK TRAN
   INSERT INTO dbo.ErrorLog VALUES (@a, @b, GETDATE())
END CATCH
GO


Gördüğümüz gibi Begin Try ve End Try arasındaki blokta bir transaction başlattık ve INSERT ifademizi yazdık. Begin Catch ve End Catch bloku arasında da olası bir hata durumunda transaction’ı rollback ederek , alınan hatayı kendi oluşturduğumuz bir Log tablosuna yazdırdık.

Böylelikle T-SQL sorgularının daha yapısal ve sağlam bir exception handling ile yönetilmiş olduğunu görmüş olduk.

Bir sonraki yazımızda görüşmek üzere.

Sorularınız için onur.kulabas@bilgeadam.com