Stored Procedure İşlemleri

Serhat tarafından yazılmıştır. 10. Aralık 2008 12:39

Merhabalar,

Bu yazımızda database kullanılan programlarda veya web uygulamalarında oldukça kolaylık sağlayan bir yapı olan Stored Procedurelere bakacağız.Stored Procedure'ler sorguların derlenmiş hali olarak SQL Server'da saklanmasına olanak tanıyan yapılardır.

Bir Stored Procedure "CREATE PROCEDURE" veya daha kısa yöntemi olan "CREATE PROC" ifadeleri ile başlar ve bu ifadeden sonra procedure adı gireriz.Burdada yazılım dünyasında çok yerde standart şekiller kullanıldığından procedure adının başına "Sp_" ifadesini eklemek okunması açısından da kolaylık sağlar.Yani "CREATE PROCEDURE Sp_Listele" gibi.Bağlı bulunduğumuz database'de procedure oluşturabilmemiz için bağlı kullanıcınında bazı yetkileri olması gerekiyor.Bunlardan bazıları Database Owner (db_owner),System Administrator  (sysadmin) gibi yetkilere sahip olmalıdır.

Örnek olarak mesela bir SP yazalım ve bu yazdığımız SP'yi çalıştırdığımızda KitapTur tablomuzdaki verileri getirsin bize.

CREATE PROC Sp_KitapTurListele
AS
Begin
    SELECT * FROM KitapTur
End

Bu şekilde bir SP oluşturuluyor.Bunu çalıştırabilmek içinde  EXEC ifadesi kullanılır ve hemen yanına SP adını gireriz.Yani yazmamız gereken ifade

EXEC Sp_KitapTurListele 

dir.

 Bu SP'yi çalıştırdığımızda KitapTur tablomuzdaki tüm bilgileri getirebiliriz.Bu yazdığımız SP'ler SQL Server'da saklanır demiştik ya işte bunlara bakabilmemiz için oluşturduğumuz veritabanının yanındaki -'ye basıp liste açıldığında "Programmability" nin altında "Stored Procedures"lerin altında yazmış olduğumuz tüm SP leri görebiliriz. Yazmış olduğumuz sorguda mesela iş mantığımızı değiştirip diyoruzki KitapTur tablosundaki 1 numaralı id'deki tur adi gelsin istiyoruz.Bunun için tekrar bir sorgu yazmak yerine CREATE ifadesine ALTER dersek daha önce oluşturduğumuz SP'nin üzerine ALTER ifadesinden sonraki hali uygulanmış olur.Yani,

ALTER PROC Sp_KitapTurListele
AS
Begin
    SELECT * FROM KitapTur WHERE id=1
End

Artık bu SP'yi  EXEC Sp_KitapTurListele diye çalıştırırsak KitapTur tablosundaki 1 numaralı kayıt gelecektir.

Biz SP'lerimize parametrede verebiliriz.Şöyle diyelim mesela bir SP yazalimki EXEC ifadesi ile çalıştırırken de KitapTur adına girilecek olan tür adını bu ifadeye parametre verelim. SP aşağıdaki gibi olacaktır.

CREATE PROCEDURE Sp_KitapTurEkle
(
    @KitapTurAdi varchar(50)
)
AS
Begin
    INSERT INTO KitapTur (KitapTurAdi) VALUES (@KitapTurAdi)
End

Bu SP'den biraz bahsedelim.Parametre atayabilmemiz için değişken oluşturmamız gerekiyor ki geçici olarak bilgilerimizi taşıyalım.SQL Server'da @ ifadesi kullanılır değişken oluşturmada var her değişkenin bir türü olacağından burada varchar(50) diyip 50 karakterlik boyut veriyoruz.Karakter ifadelerini ' ' tek tırnak arasında belirtmeliyiz. @KitapTurAdi adındaki değişkenden başka 1'den fazlada değişken oluşturup işlem yaptırabiliriz.Bu yazmış olduğumuzu parametreli SP'yi çalıştırmak için 

EXEC Sp_KitapTurEkle 'Siyaset' 

dememiz yeterlidir.Bu sorguyu çalıştırdığımızda KitapTur tablomuza Siyaset adında yeni bir kayıt girilmiş olur.

Şimdi başka bir Sp yazalım ve bu oluşturduğumuz sp'ye parametre olarak bir id verelim ve vermiş olduğumuz id değeri kaçsa o id'e göre KitapTur'den tür kayıtı silelim.Yapacağımız işlem , 

CREATE PROC Sp_KitapTurSil
(
    @TurID int
)
AS
BEGIN
    DELETE FROM KitapTur WHERE id=@TurID
END

dediğimizde vereceğimiz sayı doğrultusunda o kayıtı silecektir.SP'yi çalıştırmak içinde aşağıdaki ifadeyi yazmamız yeterlidir.

EXEC Sp_KitapTurSil 2  

Bu  EXEC Sp_KitapTurSil 2  ifadesi çalıştığında KitapTur tablosundaki 2 numaralı id'de bulunan kayıt silinmiş olacaktır.

Yazmış olduğumuz tüm sorgularda sonuç olarak etkilenen kayıt sayısı bize gösterilir.NOCOUNT ON ile sorgudan etkilenen kayıt sayısı geriye döndürülmez varsayılan olarak bu ayar OFF olarak bırakılmış durumdadır ve tüm sorgulardan kaç satırın etkilendiği hesaplanıp döndürülür bu da bize performanstan kayıp olarak geri döner. Eğer sorgudan etkilenen kayıt sayısı bizim için önemli değil ise NOCOUNT ON ile bunu iptal edebiliriz. 

KitapTurEkle diye bir SP oluşturmuştuk tekrar bir sorgu oluşturmak yerine yazmış olduğumuz ifade de CREATE yerine ALTER diyebiliriz.Ve SET NOCOUNT ON ifadesinide eklediğimizde artık etkilenen kayıt sayısı bize gösterilmez.

ALTER PROCEDURE Sp_KitapTurEkle
(
    @KitapTurAdi varchar(50)
)
AS
Begin
    SET NOCOUNT ON
    INSERT INTO KitapTur (KitapTurAdi) VALUES (@KitapTurAdi)
End

Artık bu SP'mizi

EXEC Sp_KitapTurEkle 'Kişisel Gelişim' 

diyerek çalıştırırsak etkilenen kayıt sayısı gösterilmeyecektir.Bu bilgide dipnot olsun :)

SP işlemleri ile bir sorguda ki  UPDATE,DELETE,INSERT gibi işlemleri yapabiliriz. Hatta birbiri ile ilişkili tablolarda öyle bir SP yazılabilirki tek bir id verilir ve DB'den o bilgi doğrultusunda kayıt silinebilir :)

Makalenin faydalı olması dileğiyle iyi günler :)

Serhat TAŞ

6 kişi tarafından 4.8 olarak değerlendirildi

  • Currently 4,833333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , ,

SQL

Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)  

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.5.0
Bu tema Mads Kristensen tarafından yapılmıştır ve Türkçeleştirilmesi Blog Engine Türkiye ekibi tarafından yapılmıştır.

Son Yorumlar

Comment RSS

Yasal Uyarı

Bu sitede sunulan tüm bilgi ve dökümanların kullanımından ve sitede yapılan kullanıcı yorumlarından (siyasi içerik,hakaret vb.) doğacak sorunlardan yazar sorumlu tutulamaz. 

İçeriğin kaynak belirtilmeden kopyalanması yasaktır !

SERHAT TAŞ

© Copyright 2010