Son Haberler
Anasayfa / Yazılım / SQL / Stored Procedure Nedir?

Stored Procedure Nedir?

Stored Procedures SQL’de vazgeçilmez veri tabanı objelerindendir. Türkçemizde karşılığı saklı yordam olarak kabul edilmektedir. Bir takım SQL deyimlerinden oluşmaktadır ve özellikle C#, VB, ASP.NET tabanlı projelerimizde veri tabanı ile işlem yaparken sık sık başvurduğumuz yöntemlerdendir. Çeşitli parametreler alır ve geriye değer döndürürler.

Örneğin şöyle bir işlem hayal edelim. Bir veritabanımız var ve bu veri tabanımızda bölümler ve çalışanlar olmak üzere birbiri ile ilişkili olan tablolarımız var. İlişki de şu şekilde, çalışanlar tablomda BolumID diye bir alanım ve bu alan Bolumler tablosu ile ilişkili. Bunu resmedelim :

Bu şekilde bir ilişki var. Şimdi diyelim ki ben bu veritabanında bazı bölümleri silmek istiyorum. Ama görüldüğü gibi bölümler aynı zamanda Calisanlar tablosu ile ilişkili. Bunu en kolay nasıl yapabilirim. Tabii ki Stored Procedure kullanılarak. Kabaca mantık şu şekilde :

Ben Stored Procedure yazarım bu saklı yordamımda önce istediğim bölümdeki kişileri silme kuralımı tanımlarım ve sonra da bölümler tablomda silmek istediğim bölümü silerim. Tüm bunları örneğin bir C# Windows projesinde veya bir ASP.NET sayfasında tek bir butona tıklayarak yapabilirim. Bununla ilgili bir çok örneği yapacağım ama tabii ki ilerleyen konularda.. Şimdilik Stored Procedure oluşturma kalıpları ile yetinmemiz gerek 🙂

Stored Procedure Oluştururken öncelikle CREATE PROCEDURE deyimi kullanılır. Ve ardından Procedure için bir isim tanımlanır. Parantez açılır ve ilgili parametreler tanımlanır. Sonra Parantez kapatılır ve AS deyiminden sonra yapacağım işlemler SQL komutları ile belirtilir.

CREATE PROCEDURE ProcedureIsmi
( @Parametre1 VeriTipi,
  @Parametre2 VeriTipi,
  ...
  ...
  ...
 )
 
 AS
 
 --Diğer SQL komutlarım, yani yapılacak işlemler--

Burada parametre dediğim yerler Stored Procedure içinde tanımladığım değişkenler oluyor. Parametrelerin önünde mutlaka ‘@’ işareti olmalıdır ve bunların veri tipleri SQL tarafımdaki tablomda belirtmiş olduğum alanlarla mutlaka ilişkili yani uyumlu olmalıdır.

Şimdi çok basit bir Stored Procedure yazalım. Üstteki gibi iki tablomun olduğu bir veri tabanım var. Alanların veri tipleri de şu şekilde, bu veri tiplerini yazıyorum ki, Stored Procedure’a daha dikkat edelim..

Bolumler Tablosu :

BolumID = int otomatik artan
Bolum = NVARCHAR(50)

Calisanlar Tablosu :

CalisanID = int otomatik artan
BolumID = int
Ad = NVARCHAR(50)
Soyad = NVARCHAR(50)

Şimdi şunu hayal etmenizi istiyorum. Bir windows projem ya da bir intranet, internet projem var. Bu projemde yeni bir çalışanın kayıtlarını sisteme eklemem gerekiyor. Çalışanın adı,soyadı ve bölümü ilgili tablolara kaydedilecek. Görüldüğü gibi bu veriler iki ayrı tabloda ve birbiri ile ilişkili. Operatör ilgili textbox alanlarına ad soyad yazacak, ilgili comboboxtan bölümü seçecek ve sadece KAYDET butonuna tıklayıp bu verileri veritabanına kaydedecek. Arka planda olacakların veritabanı kısmı ile alakalı olan kısmını bir STORED PROCEDURE içinde yapalım, hadi başlayalım 🙂

CREATE PROCEDURE KisiEkle
( @YeniBolumID INT,
  @YeniAd NVARCHAR(50),
  @YeniSoyad NVARCHAR(50)
  
 )
 AS 
 --Calisanlar tablosuna veri ekleme--
 INSERT INTO Calisanlar (BolumID,Ad,Soyad)
 VALUES (@YeniBolumID,@YeniAd,@YeniSoyad)
 DECLARE @YeniCalisanID INT
 SET @YeniBolumID = SCOPE_IDENTITY()
 --Sonucu görmem için Listelemeyide yaptım, kayıtla alakası yok--
 SELECT Bolumler.Bolum, Calisanlar.Ad, Calisanlar.Soyad
 FROM Bolumler
 INNER JOIN Calisanlar ON Bolumler.BolumID = Calisanlar.BolumID

STORED PROCEDURE bu şekilde, bu yordam ile ben veri tabanıma çalışanlar tabloma kayıt yapabiliyorum. Şimdi bu kod bloğumu sadece çalıştırdığımda aslında STORED PROCEDURE ilgili veritabanıma kaydediliyor. Ben bunu SQL tarafında çalışabilir hale getirmem için EXECUTE prosedür adı ve verileri girmem gerekir. Örneğin şu şekilde :

EXECUTE KisiEkle  3,'Sibel','Sibemol'

Böylelikle bu stored procedure üzerinden verimizi ekliyorum. Bir veri daha ekleyelim :

 EXECUTE KisiEkle  5,'Gökhan','Hanedan'

Böylelikle kayıtlarımız aşağıdaki gibi gerçekleşir :

Şimdi STORED PROCEDURE’ümüzü adım adım açıklamaya çalışalım.

CREATE PROCEDURE KisiEkle
( @YeniBolumID INT,
  @YeniAd NVARCHAR(50),
  @YeniSoyad NVARCHAR(50)
  
 )
 AS

Burada Stored Procedure adını tanımlıyorum, daha sonra kayıt edilecek veri için parametrelerini ve veri tiplerini belirtiyorum. Parametreler içinde YeniBolumID, YeniAd ve YeniSoyad tanımlanıyor. Tabi burada ‘@’ işaretine dikkat ve veri tiplerine dikkat.

INSERT INTO Calisanlar (BolumID,Ad,Soyad)
 VALUES (@YeniBolumID,@YeniAd,@YeniSoyad)

Bu kısımda Calisanlar tabloma yeni verimi ekliyorum. Tabloma veri eklerken görüldüğü gibi INSERT INTO kullanıyorum ve VALUES kısmında verilerimi sırası ile girmek için sıralıyorum.

DECLARE @YeniCalisanID INT
 SET @YeniBolumID = SCOPE_IDENTITY()

Daha sonra Stored Procedure içinde yeni değişkenimi tanımlıyorum.

SELECT Bolumler.Bolum, Calisanlar.Ad, Calisanlar.Soyad
 FROM Bolumler
 INNER JOIN Calisanlar ON Bolumler.BolumID = Calisanlar.BolumID

Bu kısımda da kayıt işlemi tamamlandıktan sonra listeleme yapıyorum. Bu kısım aslında kayıtla alakalı değil, sadece ben yaptığım işlemi görmek istediğim için bu kısmı yazdım.

Stored Procedure aslında oldukça geniş bir konudur ve programcılıkta yani veri tabanı programlamada vazgeçilemeyecek kadar önemlidir. İlerleyen yazılarda bir çok Stored Procedure örneği yapacağım.

11 yorum

  1. mükemmel anlatmıssın harikasın. bu siteyi yeni keşfettim bil. müh. olarak işime çok yaradı

  2. helal olsun valla çok güsel anlatmışsın… çok teşekkür ederim, peylaşımlarının devamını dilerim…

  3. Yorumlarınız için teşekkürler arkadaşlar, işinize yaradı ise ne mutlu..

  4. Net anlatım için teşekkürler.

  5. Merhabalar hocam.
    Anlatımınız için teşekkürler başarılı ve çok açıklayıcı bir anlatım olmuş.Ancak stored procedure
    ‘leri bir windows projesi üzerindeki butonlara nasıl çağıracağız?onun için ayrı bir konu varsa inceleyeyim yoksa bi yazı da onun için yazarsanız sevinirim.Teşekkürler kolay gelsin 🙂

  6. Merhabalar. Yorumlarınız için teşekkürler arkadaşlar, işinize yaradı ise ne mutlu..

    Ali Bey sorunuza gelince windows uygulamalarında stored procedure kullanımı ile alakalı olarak ayrı bir yazı yazmadım ancak ASP.NET bölümünde böyle bir yazım mevcut. ASP.NET sayfasının code behind tarafında C# ile kodları yazdığım kısımda Stored Procedure’ın .NET tarafından nasıl çağırılıp kullanılacağına değindim. Tamamen aynı, yani windows projelerinde de kullanırken CommandType.StoredProcedure ile SQL tarafında oluşturduğunuz stored procedure çağırılabilir. Örneğin aşağıdaki linkteki ASP.NET yazımda oluşturulmuş bir stored procedure ile veritabanımdaki tablo üzerinde veri güncelleme işlemi yapmıştım. 🙂

    http://www.ismailgursoy.com.tr/datalist-kontrolu-ile-veri-guncelleme-veri-listeleme-5/

  7. Çok güzel bir anlatım olmuş. Sıfır alt yapıya sahibim ancak bildiğim bazı diller sayesinde kolaylıkla karayabildim. Tekrardan teşekkürler.

  8. Çok güzel detaylı şekilde anlatmışsınız. Teşekkürler.

  9. Hocam ben bu işi stored procedure kullanmadan da yapabiliyorum sadece SQL ile.Stored procedure yapısının bana verdiği extra ne oluyor o kısmı anlamadım yani sql ile yapamadığım neyi yapıyorda bunu tercih edeyim?

  10. İyi performans için stored procedure tercih edebilirsin. Ayrıca uygulaman içinde gömülü SQL kodları yerine stored procedure adının olması sana avantaj sağlayabilir. Yani düşün ki uygulaman için de aynı sql kodundan bir çok yerde mevcut, ancak bir değişiklik yapman gerekti. Dolayısı ile hepsini değiştirmen gerekir. Ayrıca kodda daha temiz bi görünüm sağlar. Sunucu tipleri arasında geçiş de daha kolay olur. MS-SQL’den Oracle’a geçmek gibi.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir