Biraz saçma gibi gelse de sql üzerinde karar yapılarını ve döngüleri kavraya bilmek için sayısal loto örneğini yazma isteği duydum. Sql’de sayısal loto yapımına atlamadan önce kullanılan komutlardan bahsedelim. Yabancısı olduğumuz Declare komutu ile işlemde kullanılacak değişkenleri tanımlamak için kullanırız.
Örneğe geçecek olursak;
[cc lang=”sql”]
declare @sayisal table
(
sayi int
)
declare @rastgele int
declare @sayac int
select @rastgele = 0
select @sayac = 0
while (@sayac<6) begin select @rastgele = CONVERT(int, rand() * 48) +1 if not exists (select * from @sayisal where sayi =@rastgele) begin insert into @sayisal values (@rastgele) set @sayac +=1 end end select * from @sayisal[/cc] @rastgele , @sayi adında iki tane değişken tanımladık, sıfıra eşitledik. While döngüsü ile for gibi sayacı 1 arttırarak(sql’de for döngüsü olmadığı için while’ı böyle kullanıyoruz) 6 adet rastgele değer ataması için dögüyü döndürüyoruz.
select @rastgele = CONVERT(int, rand() * 48) +1 ile rastgele sayı üretip sonucun 0 gelmemesi içinde +1 ekliyoruz.
if not exists (select * from @sayisal where sayi =@rastgele) ile aynı sayı gelmemesi için şart koyuyoruz. Döngü ve şartın sonunda çıkan değeri tabloda göstermek için select * from @sayisal yazıp işlemi bitiriyoruz.
Kaynak : Cemal Can AKGÜL (Bilge Adam Yazılım Eğitmeni)
Bir başka örnek uygulama;
Biraz daha şekillendirmek istersek, mesela 10 ile 50 arasındaki sayılardan seçip oluşturduğumuz tabloya beşer beşer ekleyebiliriz. Şöyle ki 48 yerine 40 yazıp yani 40 ile çarpıp 1 yerine 10 yazdığımızda 10 ile 50 aralığında rastgele sayılar üretilecektir. Bu üretilen sayıyı sayilar isimli tabloya insert into @sayisal satırındaki @sayisal değişkeninin yerine sayilar tablomuzu koyarak oluşturulan sayıları tablomuza ekleyebiliriz. Nası yapılır, nası edilir kodları aşağıda, inceleyin;
[cc lang=”sql”]DECLARE @sayisal TABLE
(
sayi INT
)
DECLARE @rastgele INT
DECLARE @sayac INT
SELECT @rastgele = 0
SELECT @sayac = 0
while (@sayac<5) BEGIN SELECT @rastgele = CONVERT(INT, rand() * 40) +10 IF NOT EXISTS (SELECT * FROM @sayisal WHERE sayi =@rastgele) BEGIN INSERT INTO Sayilar VALUES (@rastgele) SET @sayac +=1 END END [/cc]