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.