MSSQL Fetch Cursor Kullanımı

  • 14.9.2015
  • tayyipyetis
  • MSSQL

Merhaba, bu makalede mssql üzerinde Fetch Cursor kullanımı hakkında bilgi vereceğim. genel bir tanımlama ile fetch her bir kaydın üzerinde teker teker işlem yapmaya yarayan oldukça gerekli bir özellik özellikle where cümlesinin yetmediği karmaşık işlemler gerektiren durumlarda fetch kullanarak her bir kayıt için özel durumlara göre işlemler yapabilirsiniz. örnek kullanım için aşağıdaki örneği inceleyebilirsiniz.

/* Cursor değişkenimizi tanımlıyoruz */
/* Select cümlesinde çektiğiniz tüm alanları cursor içinde kullanmak
zorundasınız aksi halde hata alırsınız */
DECLARE ornek_cursor CURSOR FOR SELECT urunid,marka,model FROM urunler;
/* urunler tablomuz için işlem yapacağımız alanları bir değişken olarak belirliyoruz */
DECLARE @urunid INT;
DECLARE @marka VARCHAR(50);
DECLARE @model VARCHAR(50);
DECLARE @sayac INT;
SET @sayac = 0;
/* Cursor değişkenimizi açıyoruz */
OPEN ornek_cursor;
/* Cursor'u ilk kayda konumlandırıyoruz */
FETCH NEXT FROM ornek_cursor INTO @urunid , @marka , @model;
/* Aşağıdaki ifade ile tablomuz üzerindeki satırlarda dolaşmaya başlıyoruz */
WHILE @@FETCH_STATUS = 0
 BEGIN
  SET @sayac = @urunid + 1;
  FETCH NEXT FROM ornek_cursor INTO @urunid , @marka , @model;
  /* yukarıdaki ifade ile değişkenlere kendileriyle aynı isme sahip tablo sütunlarının değerleri atanıyor. */
 END;
PRINT @sayac;
/* Döngü sonlandığında eksana sayac değerini yazdırıyoruz */ 
CLOSE ornek_cursor; /* işimiz bittiğinde cursor değişkenini kapatmalıyız. */ 
DEALLOCATE ornek_cursor; 
/* cursor'u kapatsak dahi sistem kaynaklarını kullanmaya devam edecektir. bu sebepten DEALLOCATE işlemini de yapmalısınız */

@@FETCH_STATUS satırların sonuna gelinip gelinmediğini belirtir değeri 0 dan farklı olduğunda döngü sonlanır. Bu şekilde tablolarınız üzerindeki kayıtlarda tek tek dolaşıp her biri için ayrı ayrı insert, update, delete işlemleri yapabilirsiniz. eğer bu işlemler standart where işlemiyle de yapabilirseniz tercihiniz bu olmalıdır. çünkü fetch cursor işlemi nihayetinde bir döngü olduğu için standart yönteme göre daha fazla zaman tüketecektir. Umarım herkese faydalı olur.

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı

Yorum Gönder

Diğer Makaleler

Etiketler