SQL - Stored Procedure Kullanımı

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