Herkese merhaba,
Bu yazıda size SQL Server’da Nested Cursor kullanımından bahsedeceğim.
SQL Server’da Cursor’lar sorgu sonucu dönen kayıtlar üzerinde satır satır işlem yapmak için kullanılır. Cursor’lar hangi satır üzerinde ise o satır üzerinde işlem yaparlar. Bu yazıda ise iç içe Cursor kullanımı yani Nested Cursor’lar hakkında bilgi vereceğim.
SQL Server’da Nested Cursor kullanılarak bir tablo üzerinde satır satır işlem yapılabildiği gibi birden fazla tablo ile de Cursor kullanabiliriz. Konu hakkındaki örneği Northwind veritabanını kullanarak inceleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
--Değişkenlerin tanımlanması işlemi DECLARE @kategoriid INT , @kategoriadi NVARCHAR(100) , @urunadi NVARCHAR(100) --En dıştaki cursor'un tanımlanması işlemi DECLARE kategori CURSOR FOR SELECT CategoryID , CategoryName FROM dbo.Categories --Cursor'un açılması işlemi (En dıştaki) OPEN kategori --Cursor ile satır satır kategori içinde gezinip kategoriid ve kategoriadi değerlerinin alınması FETCH NEXT FROM kategori INTO @kategoriid, @kategoriadi --Döngü başlıyor WHILE @@FETCH_STATUS = 0 BEGIN --İçteki cursor'un tanımlanması işlemi DECLARE urunler CURSOR FOR --Cursor ile kategoriid değerinin dıştaki sorgudan alınıp içeride dönülmesi işlemi SELECT ProductName FROM dbo.Products WHERE CategoryID = @kategoriid --Cursor'un açılması işlemi (İçteki) OPEN urunler --Burada cursor içeride kategoriid'ye göre dönüp ürün adini alıyor. FETCH NEXT FROM urunler INTO @urunadi --Döngü başlıyor WHILE @@FETCH_STATUS = 0 BEGIN --Ekrana kategoriid, kategeori adı ve ürün adını yazdırıyoruz. PRINT CAST(@kategoriid AS NVARCHAR(10)) + @kategoriadi + @urunadi FETCH NEXT FROM urunler INTO @urunadi END --İçteki cursor'un kapatılması CLOSE urunler; DEALLOCATE urunler; FETCH NEXT FROM kategori INTO @kategoriid, @kategoriadi END --Dıştaki cursor'un kapatılması CLOSE kategori; DEALLOCATE kategori; |
Dikkat ederseniz en dıştaki yapımız Categories tablosudur. Çünkü kategorilerden bir tane vardır. Products tablosunda birden fazla kategori tanımlaması yapılmıştır. Bu yüzden içeride olan tablomuz Products tablosudur. Bunu while döngüsündeki çarpım tablosu işlemine benzetebiliriz. İlk önce 1*1=1, 1*2=2, 1*3=3 şeklinde gidecek yani içerideki sorgu tamamlanacak sonrasında dışarıdaki sorguya geçecektir.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.
