Stored procedure, veri tabanımızda belirli bir görevi yerine getiren sorguları barındıran bir yapıdır. Büyük projelerde tekrar tekrar sorgu yazmak yerine bu yapıyı kullanabiliriz.
Microsoft SQL Server'da çalıştığımız veri tabanında Programmability sekmesi altında Stored Procedures altında oluşturduğumuz stored procedure'leri bulabilirsiniz.
Temel özellikleri - Avantajları ve Dezavantajları
- SP'ler, ilk çalıştığında derlenirler. Bu yüzden hızlı çalışırlar ve performanslıdır.
- Modüler programlama yapısına uygundur.
- Reusability sağlanmış olur.
- SQL Injection'dan korumamızı sağlar. Güvenlik açısından kullanışlıdır.
- Insert, Update, Delete, Select sorguları ile if,exists gibi komutları da burada kullanılabilir.
- Parametre alan ve parametre almayan seçenekleri vardır.
- Yazım standardı olarak sp ile başlaması uygun olur.
- Bazı veri tabanı teknolojilerinde debug etme kapasitesi bulunmuyor. MSSQL Server'da debug işlemi yapılabiliyor.
- Platform bağımlılık konusunda dezavantajı bulunmaktadır. Örneğin bir sp'yi Oracle'dan MSSQL Server'a taşırsak çalışmayabilir. Hatta aynı teknolojinin farklı versiyonlarında çalışmama durumu olabilir.
- Veri tabanına erişim ve iyi bir sp yazabilmek için DB Admin elemanına ihtiyaç artabilir. Bu yüzden maliyet bakımından dezavantaj olabilir.
- Hata yönetimi çalışma anında bulunması zor olacaktır.
Stored Procedure (Syntax) - MSSQL Server için
Parametre Almayan SP
CREATE PROCEDURE sp_ProcedureName AS BEGIN --SQL SORGULARI YER ALIR END GO
Parametre Alan SP
CREATE PROCEDURE sp_ProcedureName @ParametreAdi data_tipi --@pmt1 int,nvarchar(50) AS BEGIN --SQL SORGULARI YER ALIR END GO
Birden fazla parametre alan SP oluşturabiliriz, bunun için aralarına virgül koymamız yeterli olacaktır.
Parametre kullanmamız sorgularımızı dinamik hale getirecektir.
Oluşturduğumuz stored procedure'lerimizi çalıştırabilmek için EXEC komutunu kullanıyoruz. Sonrasında procedure adını ve varsa parametre değerini yazıyoruz.
Örnek kullanım
EXEC sp_ProcedureName --Parametreli SP EXEC sp_ProcedureName 3 --Parametre alan SP(type=int) EXEC sp_ProcedureName 'mert' (type=nvarchar(50))
Output Parametreli SP'ler geriye değer döndüren procedure'ler dir. Geriye dönen değeri başka sorgularda veya procedure içerisnde kullanabilmemizi sağlar.
Output Parametre
CREATE PROCEDURE sp_ProcedureName @parametre data_tipi, @Out data_tipi OUTPUT AS BEGIN --Select @OutputParametreAdi ile başlayacak sorgular, çünkü geriye döndürmek istediğimiz parametre END
Output Parametremizi kullanarak SP' mizi çağırmak istersek kullanmamız gereken aşağıdaki syntax olacaktır.
DECLARE @out datatipi EXEC sp_StoredProcedure @ParametreAdi,@out output Print @out
Örnek Stored Procedure kullanımları
sp_KareAl adında output parametreli bir procedure oluşturalım dışarıdan @sayi adında int türünden bir parametre alsın ve geriye output olarak int türünde @sonuc döndürsün.
CREATE PROCEDURE KareAl @sayi int, @sonuc int OUTPUT AS BEGIN SELECT @sonuc=POWER(@sayi,2) END GO DECLARE @sonuc int EXEC KareAl 2,@sonuc output PRINT @sonuc --Sonuç 4 döndürecektir.
Diğer bir procedure ise parametre almayan ve Kategori tablosundaki verileri listeleyecek (NORTHWND veritabanını kullandım)
CREATE PROCEDURE KategoriListele AS BEGIN SELECT * FROM Categories END GO EXEC KategoriListele
Bilmemiz gereken bir mesele var. Eğer procedure'da değişiklik yapmak istersek CREATE yerine ALTER yazarak procedure'mizi güncelleyebiliriz.
ALTER PROCEDURE KategoriListele AS BEGIN SELECT CategoryName FROM Categories END GO EXEC KategoriListele
Categories tablosundaki bütün bilgiler yerine sadece CategoryName kolonunu gösteren bir procedure haline getirdik.
Yorumlar
Yorum Gönder