Sql Server goto Deyimi

Herkese merhaba, Sql Server yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda Sql Server’da goto deyiminin kullanımını anlatacağım. Hadi başlayalım !
goto deyimi, günümüzde popüler olan programlama dillerinde bulunmasada; nispeten eski programlama dillerinin birçoğunda bulunan birşey idi ve bence kullanışlı idi de 🙂
goto deyimi kod üzerinde atlatma yapmak için kullanılmakta ve ben en çok stored procedurelerde ve fonksiyonlarda kullanıyorum. Örneğin parametre olarak aldığım verilerin istediğim gibi gelip gelmediğini kontrol edip istediğim gibi gelmediyse doğrudan fonksiyonu bitirmek için goto deyimiyle fonksiyonun sonuna gönderiyorum. Fonksiyonun sonunda ise hata döndürüyorum. Sizde bu ve bunun gibi birçok yerde goto deyimini kullanabilirsiniz. Örneğin 10 satırlık bi kodu birçok yerde kullanacaksanız o zaman her seferinde aynı kodları yazmak yerine tekrar eden kodları bir blokta toplayabilir ve sonrasında kodu goto deyimiyle o bloğa yönlendirebilirsiniz. goto’nun yapısı şöyle olmakta;
-- diğer Sql kodları
goto label
-- diğer Sql kodları
label:
-- goto ile yönlendirdiğinizde yapılacak işlemler
Buradaki label kısmına istediğiniz ismi verebilirsiniz. Kod, goto kelimesini gördüğü anda verdiğiniz ismi alacak ve o isimde bir kod bloğu olup olmadığına bakacaktır. O isimde bir kod bloğu varsa o kod bloğundan itibaren devam edecek, yoksa da hata verecektir. Yani goto kelimesini koyduğunuz yer ile yönlendirdiğiniz kod bloğu arasındaki kodlar atlanmış olacaktır yani göz ardı edilip çalıştırılmayacaktır. Örneğin bir tane stored procedure oluşturalım ve bu procedurede bir tane parametre alalım ve bu parametrenin değerinin 100’den küçük olması gereksin. Ayrıca ikinci bir parametre de 0’a eşit olmasın. Birinci parametre 100’den büyük veya ikinci parametre 0’a eşitse hata verdirelim, aksi durumda birinci sayıyı ikinci sayıya bölelim.
create procedure bol @sayi1 int, @sayi2 int as
if @sayi1 > 100
begin
goto son
end
if @sayi2 = 0
begin
goto son
end
select 'sonuç: ' + @sayi1 / @sayi2
goto bitis
son:
select 'Parametre hatası'
bitis:
İlk if içerisinde @sayi1 parametresinin 100’den büyük olup olmadığını kontrol ettik. 100’den büyükse goto son ile son isimli kod bloğuna gönderdik. İkinci if’te @sayi2 parametresinin 0’a eşit olup olmadığını kontrol ettik ve 0’a eşitse yine son isimli kod bloğuna gönderdik. İki if içerisine de girilmezse yani @sayi1 parametresi 100’den küçük ve @sayi2 parametresi 0’a eşit değilse @bolum parametresine iki sayının bölümünü atadık ve sonrasında goto bitis ile bitis isimli kod bloğuna gönderdik. goto bitis ile başka bir yere göndermemizin sebebi şu; son isimli kod bloğuna kimse göndermezse bile kod yukarıdan aşağıya doğru çalıştırıldığı için bölme işleminden sonra da son kod bloğuna girecek ve yine Parametre hatası yazacaktır. Yani bir kod bloğuna kimse göndermese bile kodun akışı içerisinde bulunuyorsa o alan çalıştırılır. Bunu önlemek için bitis isimli bir kod bloğu oluşturduk ve bölme işleminden sonra o alana gönderdik. Kod bloğunun içerisine hiç kod yazmayarak stored procedurenin bitirilmesini sağladık.
Bu örnekle beraber 2 şey görmüş olduk. Birincisi, goto bloklarına bir gönderme yapılmasa bile kod akışı içerisinde bulunurlarsa yine çalıştırılırlar. İkincisi kod blokları içerisinde kod yazmasına gerek yok, boş bloklar oluşturulabilir. Şimdi yazdığımız bu procedureyi test edelim. Örneğin (101, 10), (90, 0) ve (100, 10) parametreleri ile test edelim. Bunun için aşağıdaki şekilde bir kod çalıştıracağız;
exec bol 101,10
exec bol 90,0
exec bol 100,10
Bu kodu çalıştırdığımızda şöyle bir çıktı göreceğiz;

Evet Sql Server’da goto deyimi kullanımı bu şekilde yapılmakta. Tüm Sql Server yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.