Stored Procedure belirli amaçlar için yazdığımız kod parçacıklarıdır. Anlamı Saklı Yordamlardır. Aslında programlama dillerinde yazdığımız bir fonksiyon gibi de düşünebilirsiniz. Bir kez yazarız ve lazım olduğunda çağırıp kullanırız. Bu da bize zaman kazandırır.
Avantajları:
Hız açısından sorgulara, view, function lara göre performanslıdır. Çünkü ilk kullandığımızda derlenir ve database saklanır. Bir daha derleme işlemine tabi olmadığı için performansı yüksektir. Bu da sunucuyu yormama adına büyük bir artıdır.
Değişken ile kullanılır bu da bize bir işlem için aynı sorguyu yazmaktan kurtarır. Bir kez procedure yazarız ve lazım olan değişkeni çağırma esnasında kullanarak işlem yaparız. Yani aynı kodları yazmaktan bizi kurtarır.
İçerisinde insert, delete, update ve iç içe procedure yazmaya olanak vermesi bizlere istediğimiz işlemleri yapma açısından rahatlatır. Örneğin bir yazdığınız bir procedure var ve başka bir işlem için procedure yazarken içerisinde daha önceki procedure ün yaptığı işlevde lazımsa sadece onu çağırmanız yeterlidir. Bu sayede ikinci yazacağınız procedure ün kodu azalmış olur.
NOT : Eğer QUERY ( Sorgu ) hakkında bilginiz yoksa öncelikle onu öğrenmenizi tavsiye ederiz. Örneklerimiz yaparken northwind örnek veri tabanını kullanacağız. northwind veri tabanı öğrenme aşamasında kullanılmak için yapılmış veri tabanıdır. T-SQL ile yazacağız.
*NORTHWIND database ndeki terimler
Employees: Çalışanlar — Customer: Müşteri — Orders: Sipariş — Order Details : Sipariş Detayları, Products: Ürünler — Region: Bölge, kuzey, güney — shippers : nakliyatçılar — suppliers : satıcılar territories : saha, şehir — quantity : miktar, adet
Stored procedure oluşturma:
create proc sp_prosedurAdi
as
begin
-- islemler
end
Stored Procedure çağırma :
execute sp_prosedurAdi
Örnek 1: CategoryID ye göre products tablosundaki ürün sayısını döndüren procedure yazalım:
go
create proc sp_KategoriUrunAdetTablo(@KategoriId int)
as
begin
select COUNT(*) as Adet from Products where CategoryID = @KategoriID
end
go
Çagrılması:
exec dbo.sp_KategoriUrunAdetTablo 8
Örnek 2 : procedure bizden bir CustomerID ve o müşterinin contactName i döndürürsün
go
create proc sp_MusteriAdi(@customerId nvarchar(5))
as
begin
select ContactName from Customers where CustomerID = @customerId
end
go
Çagrılması:
exec sp_MusteriAdi 'alfkı'
Yukarıdaki örnek 2 de yapılan procedure yerine sorgu yazalım:
select ContactName from Customers where CustomerID = 'alfkı'
Görüldüğü gibi sorgu yazdığımızda sadece bir customerID ye özel oluyor. Procedure ise değişken ile çağırdığımız için bir kez yazıp defalarca kullanabiliyoruz.
NOT : insert, delete, update genel olarak sunucuyu çok yoran işlemlerdir bu sebepten yoğun ins,del,update işlemlerinin store procedurler içinde yazılması çok yerinde olacaktır.
Procedure ile insert örneği :
go
create proc sp_InsertSP(@CustomerID nvarchar(max), @ContactName nvarchar(max), @CompanyName nvarchar(max))
as
insert into Customers (CustomerID, ContactName, CompanyName)
values (@CustomerID, @ContactName,@CompanyName)
go
Çağrılması :
exec dbo.sp_InsertSP 'alfkp', 'furkan', 'x'
Procedure ile update örneği :
go
create proc sp_procUpdate(@CustomerID nvarchar(5), @ContactName nvarchar(max))
as
update Customers set ContactName = @ContactName where CustomerID = @CustomerID
go
Çağrılması :
exec sp_procUpdate 'alfkı', 'yeni isim'
Procedure ile delete örneği :
go
create proc sp_Delete(@ProducID int)-- hatalı procedure çünkü ilişki sırasına göre silinmeli
as
delete from Products where ProductID = @ProducID
go
Çağrılması :
exec sp_Delete 77
Örnek 2 : customerID ile müşteri silme örneği
go
create proc sp_MusteriSil(@musteriID nvarchar(5))
as
delete from [Order Details] where OrderID in(select OrderID from Orders where CustomerID = @musteriID)
delete from Orders where CustomerId = @musteriID
delete from Customers where CustomerId = @musteriID
go
Çağrılması :
exec sp_MusteriSil 'alfkı'
Başka bir yazımızda görüşmek üzere…