SQL Server’da Prosedürlerde Cursor Veri Tipini Output Parametresinde Kullanmak
Herkese merhaba,
Bu yazıda SQL Server’da cursor veri tipinin output parametresinde kullanımından bahsedeceğim.
Konu biraz ileri seviye bir konu bu yüzden temel olarak prosedürler ve cursorlar ile ilgili bilginiz yoksa bunları öğrenip sonra konu üzerinde yoğunlaşmanızı öneririm.
Konuyu yazarken başlık belirlemekte güçlük çektim. Aslında konu biraz da SQL Server’da VARYING kullanımıdır. Kısaca SQL Server’da VARYING kullanımından bahsedeceğiz.
VARYING ifadesini prosedür içinde Output değişkeni ile kullanırız. Sonrasında bu prosedürü bir Cursor içinde rahatlıkla kullanabiliriz. En genel anlamda VARYING’in kullanım mantığı bu şekildedir. Örnek işlemi Northwind veritabanını kullanarak inceleyelim.
--Prosedür oluşturma işlemi ve @outputlucursorobjesi tanımlanması CREATE PROCEDURE ilkuckategori @outputlucursorobjesi CURSOR VARYING OUTPUT AS --Select top 3 ifadesi ile categories tablosundan ilk üç kategori alınıp --@outputlucursorobjesi içerisine set ediliyor yani atanıyor. SET @outputlucursorobjesi = CURSOR FORWARD_ONLY STATIC FOR SELECT top 3 CategoryName from dbo.Categories OPEN @outputlucursorobjesi GO --Cursor değişkeni oluşturma DECLARE @cursorum CURSOR --Ekrana basacağımız değişkeni oluşturma DECLARE @kategoriadi NVARCHAR(100) --Prosedürü çağırıp @cursorum değerini @outputlucursorobjesi değerine atama işlemi kısaca prosedür çağırdık. EXEC ilkuckategori @outputlucursorobjesi = @cursorum OUTPUT --cursorumuz @kateegoriadi içine entegre olacak yani verilerimizi @kategoriadi içine atacak FETCH NEXT FROM @cursorum into @kategoriadi --Son kayıt gelene kadar döndürme işlemi yapılıyor. WHILE (@@FETCH_STATUS = 0) BEGIN --Ekrana yazdırma işlemi (@kategoriadi değişkenini) print @kategoriadi FETCH NEXT FROM @cursorum into @kategoriadi END --cursorumuzu kapatıyoruz. CLOSE @cursorum --cursorumuzu öldürüyoruz. DEALLOCATE @cursorum GO
Yapılan işlemi en genel anlamları ile kodların üstlerinde açıkladım ama tekrar açıklamakta fayda görüyorum. İlk olarak bir prosedür oluşturdum. Bu prosedür değişken olarak Cursor tipinde bir değişken alıyor. Bu tanımlamayı yapabilmemiz için VARYING terimini de Output ile kullanmamız gerekli. Prosedür içinde bu işlemi yaparken cursor kullanımındaki gibi kullanımlar yapıyoruz.
SET @outputlucursorobjesi = CURSOR FORWARD_ONLY STATIC FOR SELECT top 3 CategoryName from dbo.Categories OPEN @outputlucursorobjesi
Yukarıdaki kısma dikkat edecek olursak cursor kullanımına benzer ifadeler olduğunu görebiliriz.
Yazılmış olan prosedürü cursor içinde kullanabilmek için ise output kullanımlarının nasıl olduğunu hatırlamalıyız. Cursorum adında bir cursor değişkeni oluşturup bu değişken içerisine prosedürden gelen sonuçları set ediyoruz.
EXEC ilkuckategori @outputlucursorobjesi = @cursorum OUTPUT
Cursorum değişkeni sonuna output yazmayı unutmayın. Burası daha önce de belirttiğim üzere klasik output kullanımının aynısı. Sonrasında yaptığımız işlemler ise cursor kullanımının aynısıdır. Normalde cursor işlemlerinde neler yapıyorsanız o işlemleri prosedür oluşturma işlemi sonrasında yapıyorsunuz. Sonuç olarak ilk üç kategoriyi prosedür üzerinden cursor ile dönerek ekrana bastırdık.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.