Stored Procedure Kullanımı Ve Avantajları

Merhabalar,

Bir önceki yazımızda View kullanımı anlatırken artıları ve eksileri ile detaylı olarak bahsetmiştik.Bu yazımızda ise aslında view’ın eksiklerini kısmi olarak kapatabilecek özelliklerle karşımıza çıkan “Stored Procedure” kısaca ‘sp’ kullanımını anlatıyor olacağım.

Eğer icra ettiğiniz meslekte veri tabanı ile uğraşıyorsanız sp’ler ile bol bol karşılaşmışsınızdır ya da mutlaka karşılaşacaksınızdır. Zira bir tablodan veri çekmek temel sorgularla yapılabilir ya da bu görev view’a bırakılabilir.

Peki ya performans ?

Evet, konumuz veri tabanı ve yönetimi ise, söz konusu sunucumuzu fazla yormadan isteğimizi gerçekleştirmek önceliğimiz olmalıdır. Bunun için de sp’lere başvurmak durumundayız. Hedefimiz doğru, hızlı ve güvenli şekilde bizden istenileni yerine getirmektir.

Stored Procedure Avantajları

1.Hız

Stored Procedure oluşturduğumuzda bu sorguyu bir kere çalıştırdığımızda sistem bunu derler ve sonrakilerde tekrar tekrar çalıştırmaz. Daha önce çalıştırıldığında hafızaya alır ve oradan tekrardan çalıştırır. Normal sorgu çalıştırmak istediğimizde ise bunu her seferinde ilk kez karşılaşmış gibi yeniden çalıştırır. Bu da hız açısından pek avantajlı değildir.

2.Parametre Kullanımı

Bir tablo düşünün ve bu tabloda sürekli olarak değişen parametrelere göre rapor çekmek durumunda kalıyorsunuz.Ya da programınızda müşteri numarası girildiğinde, o numara ile birbirine joinlenmiş birkaç tablo üzerinden arama yaparak dönen sonuçları son kullanıcıya gösterecek şekilde bir yapınız mevcut. Bu tarz durumlarda parametre kullanımı büyük bir ihtiyacı karşılamaktadır.

3.Esneklik

Stored procedure içinde stored procedure kullanımına izin veren bu yapı ile dilediğimiz işlemleri gerçekleştirebiliriz. Bir başka detay olarak update, insert kullanımına izin verir. Bu da view yapısının eksikliklerini kapatma konusunda avantaj sağlamaktadır.

Bir başka kolaylığı ise yazılan programlarda sıklıkla benzer sorgular kullandığınızı düşünelim. Bu durumda bu sorgulardan birinde değişiklik yapmak istiyorsunuz ama nerelerde kullanıldığı konusunda tam emin değilsiniz. İşte tam da bu noktalarda sp kullanıp, düzenlenmesi gereken sorguyu sp’de güncelleyerek arkanıza yaslanabilirsiniz. 😊

Stored procedure avantajlarından bahsettikten sonra, şimdi kullanımını görelim .

STORED PROCEDURE KULLANIMI

CREATE PROCEDURE

Genel kullanımı ;

CREATE PROCEDURE Procedure_İsmi 
AS 
BEGIN 
<SORGULAR> 
END 

şeklindedir.

NOT : CREATE PROCEDURE yerine CREATE PROC şeklinde de kullanılabilir.

Eğer parametre alacak şekilde proc yazmak istiyorsak ;

CREATE PROCEDURE Procedure_İsmi
@parametre_ismi [veri_tipi] 
AS 
BEGIN 
<SORGULAR>
END

Şimdi bu kullanımları örnekler üzerinden parametre almadan ve parametre alacak şekilde iki farklı kullanımla inceleyelim.

NOT : Örneklerin tamamı NORTWIND veri tabanı üzerinden yapılacaktır.

ÖRNEK :

Müşteri tablosundaki şehirleri sayısı azalacak şekilde sp oluşturalım.

CREATE PROCEDURE sp_SehirGetir 
AS 
BEGIN 
SELECT City, COUNT(City) FROM dbo.Customers 
GROUP BY City 
ORDER BY COUNT(City) DESC 
END

Görüldüğü üzere oluşturduğumuz sp’yi exec komutu ile çalıştırabiliriz.

Şimdi de parametre kullanarak bir sp oluşturalım.

CREATE PROCEDURE sp_CustomerOrder
@ORDER_ID INT 
AS 
BEGIN 
SELECT * FROM dbo.Orders WHERE OrderID=@ORDER_ID 
END

Şeklinde bir kullanım ile dışardan vereceğimiz bir parametreye için Order tablosundan değerleri görüntüleyebiliriz.

ALTER PROCEDURE

Daha öncesinde oluşturulmuş olan procedure için güncelleme komutudur. Parametre eklemek, tablo içerisine data eklemek ya da farklı bir tablo ile joinlemek gibi durumlarda ihtiyacımız olduğunda kullanırız.

Genel kullanımı ;

ALTER PROCEDURE Procedure_İsmi
PARAMETRELER 
AS 
BEGIN 
<SORGULAR>
END

Örnek :  

ALTER PROCEDURE sp_CustomerOrder 
@ORDER_ID INT 
AS 
BEGIN 
SELECT O.OrderID,O.CustomerID,c.CompanyName,c.Address,c.City,c.Country,O.OrderDate,O.Freight FROM dbo.Orders AS O 
JOIN dbo.Customers AS C ON O.CustomerID=C.CustomerID 
WHERE OrderID=@ORDER_ID 
ORDER BY C.CompanyName 
END

Örnek :

CREATE PROCEDURE sp_CustomerOrderProduct 
@CustomerId NVARCHAR(50),
@ProductName NVARCHAR(50) 
AS 
BEGIN 
SELECT C.CustomerID,O.OrderID,P.ProductID,C.CompanyName,O.OrderDate,P.ProductName,P.UnitPrice FROM dbo.Customers AS C 
JOIN dbo.Orders AS O ON C.CustomerID=O.CustomerID 
JOIN dbo.[Order Details] AS OD ON O.OrderID=OD.OrderID 
JOIN dbo.Products AS P ON OD.ProductID=P.ProductID 
WHERE C.CustomerID=@CustomerId and P.ProductName=@ProductName ORDER BY O.OrderID 
END 

Görüldüğü üzere böylesine fazla tablo kullanımına ihtiyaç duyduğumuzda, bu tabloları her seferinde birbirine joinleyerek yazmak oldukça zahmetli olacaktır. Fakat burada sp’lerin performans bakımından avantajlarından yararlanmak ve sorgularımızı bir kere derleyip sonrasında istediğimiz yerde kullanabilmek oldukça pratiktir.

DROP PROCEDURE

SQL Server üzerinde tanımladığımız Stored Procedure’leri silmek için aşağıdaki komutu kullanabiliriz.

DROP PROCEDURE Procedure_İsmi

Örneğin ;

DROP PROCEDURE sp_SehirGetir 

komutunu çalıştırdığımızda artık sp silinmiş olacaktır.

Bu yazımızda Stored Procedure yapısının avantajlarını, genel kullanımlarını,view yapısından farklarımı parametre kullanımıyla birlikte görmüş olduk. Umarım faydalı olmuştur.

Bir sonraki yazımızda görüşmek üzere.

Hoşça kalın.

Leave a Reply

Your email address will not be published. Required fields are marked *