Stored Procedure Nedir?
Prosedür, belli bir işlevi yerine getirmek için özellikle yapılandırılmış program parçacıklarıdır. Nesneye dayalı programlama dilleri bu kadar popüler değil iken, programlar prosedürler yada fonksiyon denilen parçacıklardan oluşurdu. Bir prosedür, başka bir prosedür içerisinde çağrılabilir.
Saklı(Stored) prosedürler, SQL içindeki prosedürlerdir. SP olarak anılırlar. SP , sıklıkla kullanılan işlemler için yazılmış kodların bir defa yazılıp çok defa kullanılması böylelikle de programlamayı kolaylaştırmayı amaçlamaktadır. SP’ler, veri tabanında saklanan ve gerektiğinde ismi ile çağrılabilen SQL bloklarıdır.
Bir SQL komutu çağrıldığında ayrıştırma , derleme ve çalıştırma aşamalarından geçmektedir. SP’ler önceden derlenmiş olduğu için , normal kullandığımız bir SQL sorgusunda olduğu gibi bu 3 aşamadan geçmez, bu özelliği sayesinde programımızın performansı artmaktadır ve ağ trafiğini de azaltmış oluruz, istemci tarafından bir çok satıra sahip SQL komutunun sunucuya gitmesindense, sadece saklı yordamın adının sunucuya gitmesi ağı daha az meşgul etmiş olur. Bir kez yazıp tekrar ve tekrar kullandığımız için modüler bir yapıda program geliştirmiş oluruz.
Program içerisinde aynı SQL sorgularını kullanacağımız zaman, bunu saklı yordam haline getirerek, stored procedure leri kullanarak sadece ismini çağırma işlemi gerçekleştirebiliriz. Belirli girdi ve çıktı parametreleri olduğu için, saklı yordamların kullanımı ile güvenlik açısından kendimizi sağlama almış oluruz.
Stored Procedure Tipleri :
- Extended Stored Procedure : Genellikle *.dll şeklinde derlenmiş prosedürlerdir.
- CLR Stored Procedure : SQL Server 2005’den itibaren CLR ortamındaki herhangi bir dili kullanarak da stored procedure’ler kodlayabiliriz.
- Sistem Stored Procedure : Genellikle sp_ ön eki ile başlarlar ve hepsi master veri tabanında tutulur.
- Kullanıcı Tanımlı Stored Procedure : Programcının yani bizim programladığımız stored procedurlerdir.
Store Procedure Genel Yapısı :
Parametresiz Stored Procedure Oluşturmak :
Stored Procedure’lerin genel yapısı:
CREATE PROC[EDURE] prosedür_adı
[ WITH Seçenekleri ]
AS
SQL ifadeleri
GO
Yukarıda gördüğümüz gibi Create Proc veya Create Procedure deyimi ile başlıyoruz ve prosedürümüzün ismini yazıyoruz. WITH seçeneği stored procedure’un içinde bulunan kaynak kodlarını gizlemek için kullanılır. Bu bölüm isteğe bağlıdır, istenilirse kullanılmayabilir. Create Procedure ile AS deyimleri arasına , ilerde bahsedeceğim , parametreli stored prosedürler için değişken tanımlaması yapılır. Parametresiz prosedürler için herhangi bir tanımlama yapılmaz, AS yazılarak devam edilir. AS’den sonra prosedürün içine yazacağımız SQL ifadelerini yazarız ve GO deyimini de ekleyerek prosedürümüzü tamamlamış oluruz.
GO deyimi zorunlu değildir ama programı ciddi hatalardan kurtarır.
Prosedürü yazdıktan sonra bir kez çalıştırırız.
Prosedürü daha sonradan çağırmak için ;
EXEC prosedür_adı
kodunu yazarız.
Örnek 1: Parametresiz stored prosedürü
Daha önceden oluşturduğumuz veri tabanımızda bulunan Employee tablomuzdan J harfi ile başlayan kişileri listeyen SQL sorgusunu yazalım.
SELECT Fname AS Isim, SSN AS ‘Sosyal Güvenlik Numarası’
FROM Employee
WHERE Fname LIKE ’%J%’
Sonuç :
Eğer bu sorguyu prosedür şeklinde yazmak istersek ;
İlk önce prosedürümüzü bir kez çalışıyoruz.
Prosedürümüzü çağırmak için;
EXEC JArama
kodunu yazıp çalıştırırsak gene aynı sonucu elde ederiz.
Parametreli Stored Procedure Oluşturmak :
Daha önce yukarıda bahsedildiği gibi değişken tanımını CREATE PROCEDURE ile AS deyimleri arasına yazarız.Değişkenin başına @ işareti koyulur. Parametreli Stored Procedure yapısı aşağıdaki gibidir.
CREATE PROCEDURE prosedür_adı
@değişken_adı
AS
SQL ifadeleri
GO
Parametreli prosedürü çağırırken ;
EXEC prosedür_adı istenilecek_deger
Örnek 2: Parametreli Store Procedure
Dışarıdan girilen Employee tablosundaki bir isim bilgilerini getiren parametreli stored prosedürü yazalım.
Sonuç :
Yazdığımız her saklı(stored) prosedür oluşturduğumuz veya çalıştığımız veri tabanı içindeki Programmability in altında Stored Procedure klasörünün içinde birikmektedir. Yazdığımız prosedürü silmek istersek buradan silebilir veya yazdığımız prosedürleri buradan görebiliriz.