Cursor Nedir?
Veritabanı nesneleri içerisinde; kayıtlar arasında, satır bazlı hareket etmemizi sağlayan yapıdır.
1-) Cursor sayesinde istediğimiz satıra hareket ederek sonucunu alabiliriz.
2-) Aktif kayıt tespit edilir.
3-)Bu yapıda trigger,store procedure ve script kullanılabilir
** cursoru t-sql kodlarıyla oluşturabiliriz yada database apilerini kullanaral oluşturabiliriz.Database api fonksiyonları ADO,OLEDB ve ODBC yapılarıdır.
FETCH VE Diğer Özellikler;
Fetch cursor hareketlerini yönetir
Fetch First: ilk satıra gider.
Fetch next: Sonraki satır.
Fetch last: bir sonraki kayıta gider.
Fetch absolute n olarak ifade ettiğimizde ise kaç kayıt gidileceğini belirtir.
Fetch Relative n olarak ifade ettiğimizde ise kayıt ilerleme miktarını o an bulunan kayıta göre yapar.
Bir cursor ifadesi open ile açılır close ifadesi ile kapanır.
Şimdi bir uygulama ile görelim;
declare film cursor for

declare film cursor for
select isim from bilgi
open film
fetch next from film while @@fetch_status=0
begin
fetch next from film
end
close film
deallocate film bı kodu yazıp çalıştırdığımızda soldaki gibi sonuç çıkartacaktır.
Store Procedure İçerisinde Cursor Tanımlaması-Kullanımı;
Cursor tanımlamasını store procedure oluşturuken de yapabilirdik.Örneğin veritabanınızda işçilerin maaşlarını tutyorsunuz işçilere verdiğiniz maaşları ve toplam işçi sayısını store procedure içerisinde cursor tanımı yaparak kullanabilirsiniz. Store procedure içerisinde döngüler sorgular yazabiliyorduk cursor yardımı ile örneğin bir stok veritabanınız var ve ürün satılıyor elinizde ürün bittiginde o ürünü -tabloyu silmek ihtiyacı duyulabilir bu durmda
while(@@fetch_status<>-1) döngüsünü store procedure içerisinde diyerek kontrolü sağlamış oluruz.
(yorumlarda istek olursa örnek ekleyebilirim)
Trigger – Cursor Uygulamaları:Triggler ile konumuzda değinmiştik triggerlar teitkleyicidiler ve yazılımı karmaşıklıktan kurtarırlar. Bir store procedure ile satırlarca yazacağımız kodu trigger ile kolayca halledebiliriz.
Cursor uygulama: Şimdi müzik anketi yaptıgımız bir veritabanımız olsun ve her 3 kayıttan birini getirelim basit bir uygulama fakat önemli olan hız meselesi bu işlemi mümkün olduğu kadar hızlı yapmak için Fetch Relative 3 dememiz gerekir;
declare muzik scroll cursor for
select * from anket
open muzik
declare @say=1
while(@say<=3)
begin
fetch relative 3
set @say=@say+1
close muzik
deallocate muzik