Sql Prosedür Nedir ? Ve Örnekleri
Prosedür Nedir Ne İçin Kullanılır Neden Kullanılır Sorusunun Cevabı ?
Sql’de Prosedürleri işlerimizi kolaylaştırmak için kullanırız genel olarak. Bir sorgu yazarken çok fazla şekilde hatalar alıyoruz. Örneğin bir insert yapacaksınız ve o insert daha önce yapılmış ise Prosedür , yardımı ile bu sorunu çok rahat çözebiliriz. Prosedür ile kontrol ettirip var ise tabloyu güncelleyecek.
İlk örneğimizde banka para transferi örneği yapacağız.
Hesaplar Tablosu
Yapılacaklar
Hesaplar tablosunda iki hesap arasında para transferi
yapan prosedür. Eğer gönderilecek tutar ile bakiye
0’ın altına düşmüyorsa transfer yapılsın,
düşüyorsa bakiye yetersiz mesajı verilsin.
1 2 3 4 5 6 7 8 9 10 11 12 | create proc para_transfer (@gonderen int,@alan int,@para int) as if(@para<=(select bakiye from hesaplar where hesap_no=@gonderen)) --- para bakiyeden küçükse atıyor büyükse atmaz begin update hesaplar set bakiye=bakiye-@para where hesap_no=@gonderen --- parayı azaltıyoruz update hesaplar set bakiye=bakiye+@para where hesap_no=@alan ---- giden hesaba ekliyoruz end else print 'bakiye Yetersiz' exec para_transfer 123,345,500 |
Create Proc Diye başlıyoruz Prosedürün isimini yazıyoruz. Sonra kullanacağımız yani kontrol edeceğimiz degişkenleri oluşturuyoruz tablodaki veri tiplerine göre
İf ile degişkende girilen para gonderenin bakiyesinden küçük ise ,
Gönderenin parası düşer alanın parası aktarılır.
else düşerse para bakiyeden büyükse bakiye yetersiz hatası verir
Exec ile de prosedürü kullanırız . ve sonucu gösteririz.
Tabloda alan Hesap 123
Gönderen Hesap 234
Gönderilecek Para 500 tl
** Bu şekil yazarak hiç uğraşmadan direk exec ile çağırıp 500 tane kod yazmıyoruz. Hem zamandan hemde kod karmaşıklığından kurtarıyor bizi **
Ürün Tablosu
Örnek / Ürün Tablosundaki O Isime Göre Ürün Varmı Diye Aran Prosedür Yazın
1 2 3 4 5 6 7 8 9 10 11 | create proc urun_sorgulama ( @urunisim varchar(20) ) as if exists (select * from tbl_Urun where UrunAdi=@urunisim) print 'Ürün Satışı Var' else print 'ürün satışı Yok' Exec urun_sorgulama 'Çivi'; |
Ürün ismi diye bir değişken oluşturdum.
If exits ile boşmu dolumu diye içine urunadının içinde klavyeden girdiğimiz değer varmı diye kontrol ettiriyoruz.
var ise var yok ise else ile ürün satışı yok yazdırıyoruz.
Sipariş Detay Tablosu
Sipariş detay tablosunda sipariş numarası girilen faturanın toplam tutarını getiren prosedür.
(Sipariş numarası yanlışsa böyle bir satış gerçekleştirilmedi mesajı verilsin.)
1 2 3 4 5 6 7 8 9 10 | create proc faturatoplam (@siparisno int) as if exists(select * from tbl_SiparisDetay where SiparisNo=@siparisno) begin select siparisno,SUM(miktar*fiyat)as toplamtutar from tbl_SiparisDetay where siparisno=@siparisno group by SiparisNo end else print 'Böyle bir sipariş no yok' exec faturatoplam 2 |
Tek parametre kullanarak sipariş numarasını kontrol edeceğimiz için 1 tane sipariş no degişkeni oluşturuyoruz.
If exists ile sipariş no tabloda varmı diye kontrol ediyoruz.
Sonra sum ile miktar ile fiyati çarpıyoruz. where ile sipariş numarasını degişkene göre ayarlıyoruz.
Boşsa else düşüp böyle bir sipariş yok yazacak . Var ise sorgu alt kısımda çıkacak.