Bu yazımda Sql Server üzerinde Store Procedure kullanımını, sıfırdan başlayan bir yazılımcının anlayacağı şekilde anlatmaya çalışacağım. Öncelikle “Store Procedure” ne olduğunu hakkında bilgiler veriyim. “Store Procedure” veritabanı üzerinde saklanan yordamlardır. Yordamlar dışarıdan parametre alabilir ve geriye veri veya bilgi gönderebilirler.
Fonksiyon yazmamızın bir nedeni, yazılan kodun birden fazla kez kullanımını sağlamaktır.
İşte “Store Procedure” burada yazmış olduğumuz sql komutlarımızdır. Bir kere yazdıktan sonra derlenir ve istediğimiz kadar çağırabiliriz.
Veritabanımızı bir yerden başka bir yere taşıdığımızda, “Store Procedure” leride taşımış oluruz.
Veritabanımızda “Programmability -> Store Procedure” düğümünde yer alırlar.
“Peki istemci üzerinden Sql Komutları göndermek varken, neden veritabanı üzerinden yordam oluşturup işleri daha karmaşık hale getirelim” diye sorabilirsiniz. Araştırmalara göre normal komut satırlarına göre çok daha performanslı olduğu ortaya çıkmış.
Ağ trafiğini büyük ölçüde azaltıyor.
İstemci programları üzerinde taşınması yerine veritabanı içinde daha güvenli yerde saklanıyor.
BİLGİ
“Store Procedure” kolay olmasına rağmen, kodları yazarken bir kaç söz dizimini bilmeniz gerekiyor. Bu arada “Store Procedure” içerisinde döngüler, koşullar vs.. kullanabilirsiniz.
YORUM SATIRLARI
“Store Procedure” üzerinde yorum yapmak için iki tane seçeneğiniz mevcut.
-- ============================================= -- Author: Çağdaş KARADEMİR -- Create date: 01.09.2010 -- Description: Ürünlerin İçerisindeki tüm liste sayısını verir -- =============================================
— işareti ile sadece satırı yorum haline getirebiliriz.
/* ============================================= Author: Çağdaş KARADEMİR Create date: 01.09.2010 Description: Ürünlerin İçerisindeki tüm liste sayısını verir ============================================= */
Diğeri ise /* */ işareti ile satır arasında kalan tüm metini yorum haline getirebiliriz.
İSİMLENDİRME
“Store Procedure”‘de isimlendirme yapılırken genellikle spProsedürAdı şeklinde yapılması, okunabilirliği arttırıyor.
Örnek : spUrunEkle, spUrunGetir, spUrunSil vs..
GİRİŞ
Parametre almayan prosedür oluştururken alttaki yapı kullanılır.
Create PROCEDURE <procedure adi> As Begin <Çalıştırılacak Sql Komutları> End
Begin – End arasında kalan yer kapsam anlamına gelir. Buradaki anlamı Procedure içindeki kapsamı gösteriyor. Aynı şekilde While döngüsü, If koşulu kullanmak istediğinizde Begin – End ile kapsamı belirtebilirsiniz.
Şimdi bu haliyle Urunler tablosunun tüm satırlarını getiren bir prosedür yazalım.
CREATE PROCEDURE spUrunleriGetir AS BEGIN SELECT Urunler.UrunID,Urunler.UrunAdi FROM Urunler END GO
Çalıştırma yaparken ise “EXEC ProsedürAdı” veya “EXECUTE ProsedürAdı” komutlarını kullanarak yapıyoruz.
EXEC spUrunleriGetir
PARAMETRE ALAN PROSEDÜR YAPMAK
Parametre alan bir fonksiyon yazmak istediğimizde ise prosedür adından sonra parantez içinde parametreleri veriyoruz. Fakat parametre verirken @ işaretini kullanıyoruz. Ayrıca parametrelere varsayılan değerde atama yapabiliyoruz.
Create PROCEDURE <procedure adi> (<parametre adi,parametre tipi> <varsa varsayılan değeri>) As Begin <Çalıştırılacak Sql Komutları> End
Yukarıdaki gördüğünüz iskelete göre aşağıda @ParamID adlı parametre ile sadece o kaydı getirmiş oluyoruz.
CREATE PROCEDURE spUrunGetir ( @ParamID INT ) AS BEGIN SELECT Urunler.UrunID,Urunler.UrunAdi FROM Urunler WHERE [email protected] END
Bu prosedürün kullanımı ise
EXEC spUrunGetir 1
İstersek parametrelere varsayılan değerde atama yapabiliyoruz.
CREATE PROCEDURE spUrunGetir ( @ParamID INT=0 ) AS BEGIN SELECT Urunler.UrunID,Urunler.UrunAdi FROM Urunler WHERE [email protected] END
GERİYE DEĞER DÖNDÜREN PROSEDÜRLER
Geriye değer döndüren prosedürleri anlamak için birkaç terimi daha bilmemiz gerekiyor.
Bunlardan birisi out veya output anahtar kelimesidir. Bu kelimeleri kullanarak, hangi parametrenin değer döndürdüğünü SQL SERVER’a tanıtıyoruz.
SQL SERVER içinde değişken tanımlamak için DECLARE anahtar kelimesini kullanıyoruz.
Kullanımı
DECLARE <@DegiskenAdi> <degisken türü>
Şimdi Urunler tablosundaki, bir ürünün StokAdedini geri döndüren prosedürü yazalım. ID parametresini alarak da sadece bir tane ürünün kaydın döndürelim.
CREATE PROCEDURE spUrunAdetGetir ( @UrunID INT, @UrunAdet INT OUTPUT ) AS BEGIN SELECT @UrunAdet=Urunler.StokAdedi FROM Urunler WHERE [email protected] END
“@UrunAdet INT OUTPUT” kullanarak @UrunAdet adlı parametrenin OUTPUT anahtar kelimesi sayesinde geriye değer döndürdüğü belirtiyorum.
Kullanımı ise;
DECLARE @Adet INT EXECUTE spUrunAdetGetir @UrunID = 1, @[email protected] out SELECT @Adet
şeklindedir.
teşekkürler hocam yeni başlayanlar için baya iyi olmuş
Güzel bir yazı olmuş.Teşekkürler paylaşımınız için
Emeğinize sağlık gayet açıklayıcı olmuş 🙂