29 Kasım 2010 Pazartesi

Sql'de Cursor(İmleç) Kullanımı

Gün gelir ki şöyle bir senaryoyla karşılaşabiliriz. Var olan bir tablodaki kayıtların içinde döngüyle dönüp, bazı verileri çekmeniz istenebilir :) Ne yapacaksınız bu durumda, cevabımız çok basit. Örnek üzerinden anlatınca, oldukça anlaşılır olacak.

Senaryomuz şöyle olsun, Table_1 isimli tablomuzdaki pr kolonundaki kayıtlarda teker teker dönüp, ssPromoCode tablosundaki kolonlardan birine ekleyelim. Bunun için düşünmemiz gereken çözüm, Table_1 tablosundaki pr kolonunda kayıt kayıt gezip, her kaydı ssPromoCode tablosuna eklemek olacak. İşte burada Cursor kavramı devreye girecek.

Kısaca kullanılışı;

declare @code nvarchar(10)
declare dongu cursor for --dongumuzu tanımlıyoruz
select pr from Table_1 --pr kolonundaki tüm kayıtları getiriyoruz
open dongu --dongumuzu açalım
fetch next from dongu into @code --ilk kayıt
while @@FETCH_STATUS=0 --döngü sonlanmadıkça, veri gelişi bitmedikçe döngü devam edecek
begin
insert into Urunler(Pr,Pr_OK,Pr_Dt,Pr_Total)
values
(@code,1,GETDATE(),,100)
fetch next from dongu into @code --bir sonraki kaydı getirir
end
close dongu--dongumuzu kapatırız.
deallocate dongu--dongumuzu tamamen bellekten sileriz

0 yorum: