Sql Serverda bazen while döngüsünü kullanma ihtiyaci duyariz. Bu makalemizde while döngüsünü basitçe anlatip bir örnek yapacagiz.
While döngüsünün yapisi
WHILE Boolean_ifadesi {sql_ifadesi | ifade_blogu} [BREAK] {sql_ifadesi | ifade_blogu} [CONTINUE] |
.
Boolean_ifadesi:
Dogru veya yanlis deger döndüren ifade. Boolean_ifadesi bir select sorgusu içerir,select sorgusu parantez içinde yazilmalidir.
{Sql_ifadesi | ifade_blogu}
BEGIN ve END bloklari arasina yazilmis bir T_SQL ifadesi
BREAK
While döngüsünü istedigi zaman sonlandirmak için kullanilir. END cümlesinden sonra yazilan ifadelere geçer.
CONTINUE
While döngüsünün basina gider, CONTINUE kelimesinden sonra yazilan ifadeler çalismaz.
Not: Eger iç içe iki adet while döngüsü varsa, içerdeki döngüde kullanilan bir BREAK komutu sadece içteki döngüyü sonlandirir ve distaki döngü çalismasina devam eder.
While döngüsü ile ilgili yukaridaki ifadeleri içeren basit bir örnek verelim. Urun fiyatlarini tutan bir tablomuz olsun. Tüm ürünlerin fiyat ortalamalarini kontrol edelim eger yirminin altinda ise ürün fiyatini ikiye katlayalim. Tüm ürünlerin fiyatlarinin ortalamasi yirminin üstüne çikana kadar döngümüz devam etsin. While döngüsü içindeki kisimda ürün fiyatini ikiye katladiktan sonra tabloda bulunan en pahali ürünü bulup 60 dan büyük mü diye bakalim eger büyükse döngüyü BREAK ile sonlandiralim degil ise CONTINUE ile döngüye devam edelim.
create table #Urun ( Fiyat int ) insert into #Urun(Fiyat) values(15) insert into #Urun(Fiyat) values(25) insert into #Urun(Fiyat) values(10) insert into #Urun(Fiyat) values(30) insert into #Urun(Fiyat) values(5) insert into #Urun(Fiyat) values(35) insert into #Urun(Fiyat) values(3) GO WHILE (SELECT AVG(Fiyat) FROM #Urun) < 20 BEGIN UPDATE #Urun SET Fiyat = Fiyat * 2 SELECT MAX(Fiyat) FROM #Urun IF (SELECT MAX(Fiyat) FROM #Urun) > 60 BREAK ELSE CONTINUE END |
Yukaridaki örnekte gördügünüz Boolean ifadesinde olarak bir select sorgusu kullandik. Peki, daha önceden tanimladigimiz bir degiskeni nasil kullaniriz. Bu örnegimizde iki sayi arasinda kalan tüm sayilari üretip bunlardan çift olanlari bir tabloya yazalim.
create table #Sayilar ( Sayi int ) declare @i bigint set @i = 125 while(@i <=652) begin if @i%2 = 0 –sayi çiftmi insert into #Sayilar values(@i) set @i = @i+1 end |
Yukaridaki sorgu 125 ile 652 arasinda kalan çift sayilari #Sayilar isimle geçici tabloya atar.
Hocam bir sorum olacakti
Sql server icinde bir store prosedurum var bununla birkac tablodan degerleri cekiyorum.Ayni store prosedurun icinde dongu kurup bunu da bir kolon olarak gostermem mumkun mudur? Bu konuda ornek verebilir misiniz?
Sizden bir istegim olacak sql e daha yeni basladim hoca upper komutunu kullanmadan küçük harfleri büyüge çeviren program kodlarini istiyor eger yardimci olursaniz sevinirim.Simdiden tesekkür ederim.