Stored Procedure Kullanımı 

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…

Leave a Reply