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.

406 Kez Okundu