Stored Procedure

Merhaba Arkadaşlar,

Bu makalemizde SQL Server üzerinde Stored Procedure yazimini inceleyecegiz.

Stored Procedure’ler database server üzerinde saklanan SQL cümlecikleridir. Parametreler alabilirler vsize: 16px; line-height: 1.5;”>e size sonuçlar döndürebilirler. Avantajlari arasinda DB server üzerinde olmasindan dolayi daha hizli çalismalari, sadece ilk çalismalarinda derlenmeleri sonraki çalismalarda derlenmemeleri (bu da neden hizli oldugunu açikliyor) SQL cümlecikleri ve programlama dilleri ile yazdigimiz kodlari birbirinden ayristirmamizi saglamasi sayilabilir.

Mesela MUSTERI tablosundaki tüm kayitlari getiren sadece ID degeri verilen MUSTERI kaydini getiren ve istenilen müsteri kaydinin silinmesini saglayan Stored Procedure leri sirayla yazalim.

    1-Tüm müsteri kayitlarini döndüren Stored Procedure

1
2
3
4
5
6
7
8
CREATE PROCEDURE Musteri_ReadAll
AS
BEGIN
      SET NOCOUNT ON;
      SELECT * from MUSTERI
END
GO

Peki bu Stored Procedure nasil çalistiracagiz. Bunu da EXEC komutu ile yapariz

1
EXEC dbo.Musteri_ReadAll

komutunun sonuç kümesi asagidaki gibidir

—Basit bir örnekten sonra daha bir karmaşık örnek yaparak ilerleyebiliriz.

Bu örnek Sales.OrderValues ve Sales.Customers tablolarından

customer.custid,customer.contactname ve Order.val columlarını secer. Group By ile custid ve contactname kullanılarak gruplanacak.order by  ve desc ile büyükten küçüğe sıralanacak. ve en son da select top(10) ile ilk on satır görüntülemeye hazır hale getirilecek.

CREATE PROCEDURE Sales.GetTopCustomers AS
SELECT TOP(10)
c.custid,
c.contactname,
SUM(o.val) AS salesvalue
FROM Sales.OrderValues AS o
INNER JOIN Sales.Customers AS c ON c.custid = o.custid
GROUP BY c.custid, c.contactname
ORDER BY salesvalue DESC;
Yarattığımız prosedürü çalıştırmak için alttaki satirı yazıp çalıştırmak yeterli olacaktır.
Ayrıca prosedürü başka fonksiyonların içinde de kullanabiriz.
exec Sales.GetTopCustomers
Dönecek sonuc:
sonuc
İçinde Değişken Kullanılan Stored Procedure  ve Değişiklik Yapılması
Aşağıdaki örnekle yukarıda yaptığımız örneğe Alter ile başlayarak değişilklik uygulayacağımızı belirttik.
@orderyear adında integer bir değişken ekledik. Artık prosedürümüzü istediğimiz yılı biz belirleyerek çağırabiliriz.
Alter PROCEDURE Sales.GetTopCustomers
@orderyear int---------
AS
SELECT
Top 10
c.custid,
c.contactname,
SUM(o.val) AS salesvalue
FROM Sales.OrderValues AS o
INNER JOIN Sales.Customers AS c ON c.custid = o.custid
WHERE YEAR(o.orderdate) = @orderyear---------
GROUP BY c.custid, c.contactname
ORDER BY salesvalue DESC
 
exec Sales.GetTopCustomers @orderyear = 2007
 Untitled2
exec Sales.GetTopCustomers 2008
 3Untitled
References:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s