Kas
8
2011

Stored Procedure Sql Server

Merhaba Arkadaşlar,

Bugünkü yazımda sizlere veritabanın (database) da olması gereken en önemli özelliği yani stored procedure anlatacağım.Store procedure dilimizde “saklı alt yordam” veya “saklı işlem grubu” olarakta ifade edilmektedir. Stored procedure’lerin en önemli özellikleri database server’ın içinde saklanmalarıdır.Derlenmesi için başlangıçta çalışır ve daha sonraki kullanımlarda derlenmez. Buda bize artı zaman kazandırır  ve  iyi bir performans sunar. Stored procedure’ler C,C#, java ya da başka programlama dillerindeki fonksiyonlar gibi parametreler içermektedir. Bir özelliği daha ise  oluşturulacak bir procedure’ün içinde declare, set, if ,try catch gibi deyimlerinde kullanılmasıdır. Eğer bir veritabanı ile uğraşıyorsanız kesinlikle işlerinizi stored procedure ile halletmenizi öneriyorum.

Stored procedurelerin kullanıldığı başlıca alanlar :

  • Tablodan veri çekme
  • Tablodan veri silme
  • Tabloya veri ekleme
  • Tablodaki veriyi güncelleme

Örneklerle Stored Procedure’n mantığı ve işlevi daha iyi oturacaktır.

  •  İlk olarak alt yordamın  söz dizim (syntax) şekli 2 türlü yazılabilir :
CREATE PROCEDURE [Procedure İsmi]
(
- -girilecek parametre değerleri buraya yazılıcak
)
WITH  { RECOMPILE ENCRYPTION }
AS
BEGIN
         - -BEGIN END Kullanılması zorunlu degildir.
END
—————————————————–
CREATE PROC [Procedure İsmi]
(
- -girilecek parametre değerleri buraya yazılıcak
)
AS
  • With ile beraberinde yazılan ifadeler  { RECOMPILE ENCRYPTION }
    • RECOMPILE  ifadesi Stored procedure her çalıştırmada (execute) yeniden derlenecek anlamına gelir.
    • ENCRYPTION  ifadesi  yazılan kodun şifrelenmesidir. Şifrelenmiş kodu sadece o prosedürü yaratan ve system admin olan görebilir.
  •  Alt yordamın söz diziminide öğrendikten sonra sık kullanılan veri ekleme prosedürünü yazalım :
Şirkete yeni bir çalışan alındığında, bu çalışanı rahatlıkla eklemek istiyoruz.
-
CREATE PROC SP_CalisanEkle
(
@CalisanID nchar(5),  - -Parametleri oluştururken başına @ İşareti 
koyulur ve bitişik olarak hangi işleve yarıyacaksa onun 
hatırlatacak isim girilir daha sonra veri tipi yazılarak 
bir sonraki parametreye geçilir.
@CalisanIsim nvarchar(40),
@CalisanSoyisim nvarchar(40),
@CalisanTelefon nvarchar(10),
@CalisanAdres nvarchar(100),
@CalisanNotlari nvarchar(100),
@CalisanDugumTarihi DATETIME
)
WITH ENCRYPTION
AS
IF EXISTS(SELECT * FROM dbo.CalisanlarinTablosu WHERE  CalisanID=@CalisanID)
BEGIN
PRINT 'Sistemde id numarası mevcuttur!'
END
ELSE
BEGIN
INSERT INTO dbo.CalisanlarinTablosu VALUES (@CalisanID,@CalisanIsim,
@CalisanSoyisim,@CalisanTelefon,@CalisanAdres,@CalisanNotlari,
@CalisanDogumTarihi)
END
-------------------------------------------------------

SP_CalisanEkle prosedüründe If exist() komutunu ve begin end işlevlerini görebilmek için oluşturulmuştur. IF EXIST() , bize exist() bölümünde oluşturulan kod içinde bir  değer varsa ” True ” olur ve ilk “begin end” bloguna girip sistemde aynı calısan numarasına ait baskasının olduğunu söyler. Eğer sistemde aynı id numarasına ait bir calısan bulunmadıysa, yeni çalışan else bloğuna girip ekleniyor. Eğer tek bir satırdan oluşuyorsa kodunuz Begin End bloğunu yazmak zorunda değilsiniz.

BEGIN END bloğu programlama dillerindeki süslü parantezlerdir (scope) { }.

Stored Procedureleri çalıştırmak için oluştutulan method adının önüne EXEC  ya da EXECUTE komutları yazılabilir. Örneğin:

EXEC SP_CalisanEkle ‘OSM99′,‘Osman’,‘Oztürk’,’05541231212′,’134 sokak daire:5 Mecidiyekoy / Istanbul’,‘Isinde basarılıdır’,’1980-02-02 ‘ 

EXECUTE SP_CalisanEkle ’OSM99′,‘Osman’,'Oztürk’,’05541231212′,’134 sokak daire:5 Mecidiyekoy / Istanbul’,‘Isinde basarılıdır’,’1980-02-02′ 

Alt yordamı çalıştırmak için bir seçeneğiniz daha var o da exec ya da execute komutları yazmadan sadece prosedürünüzün adını yazıp gereken parametreleri doldurmaktır.

SP_CalisanEkle ’OSM99′,‘Osman’,‘Oztürk’,’05541231212′,’134 sokak daire:5 Mecidiyekoy / Istanbul’,‘Isinde basarılıdır’,’1980-02-02′ 

 

  • Stored Procedurelerde önceden hazırlanmış olan alt yordamın üzerinde değişikliklerde yapılabilir. Oluşturduğumuz SP_CalisanEkle procedure’ne ek olarak çalışanların hangi program dillerini bildiklerinide ekleyelim ayrıca eğer yeni çalışanın yaşı 30′dan büyükse  firmadaki projelerin denetimine katılacakların listesinede (tabloya) eklensin. Proje denetmen tablosuda 4 özellikli bir tablodur. Sonuç olarak burada istenen ek programlama dili bilgisi, bizim esas tablomuzda da bu değişikliğin yapılmış olduğunu gösterir ve buna göre tekrar alt yordamın düzeltilmesi istenir. Değişiklikleri kaydetmek için ALTER komutunu kullanıyoruz .Bunun için yapılan değişiklikler aşadaki gibidir.
ALTER PROC SP_CalisanEkle
(
@CalisanID nchar(5),
@CalisanIsim nvarchar(40),
@CalisanSoyisim nvarchar(40),
@CalisanTelefon nvarchar(10),
@CalisanAdres nvarchar(100),
@CalisanNotlari nvarchar(100),
@CalisanDugumTarihi DATETIME,
@CalisanProgDilleri nvarchar(100)
)
WITH ENCRYPTION
AS
IF EXISTS(SELECT * FROM dbo.CalisanlarinTablosu WHERE  CalisanID=@CalisanID)
BEGIN
PRINT 'Sistemde id numarası mevcuttur!'
END 
ELSE
BEGIN
IF (30 <= DATEPART(yyyy,GETDATE())-DATEPART(yyyy,@CalisanDogumTarihi))
BEGIN
INSERT INTO dbo.ProDenetmenTablosu VALUES
(@CalisanID,@CalisanIsim,@CalisanSoyisim,@CalisanTelefon)
INSERT INTO dbo.CalisanlarinTablosu VALUES (@CalisanID,@CalisanIsim,
@CalisanSoyisim,@CalisanTelefon,@CalisanAdres,@CalisanNotlari,
@CalisanDogumTarihi,@CalisanProgDilleri)
END
ELSE
BEGIN 
INSERT INTO dbo.CalisanlarinTablosu VALUES (@CalisanID,@CalisanIsim,
@CalisanSoyisim,@CalisanTelefon,@CalisanAdres,@CalisanNotlari,
@CalisanDogumTarihi,@CalisanProgDilleri)
END
END

  •  Son olarakta oluşturulan stored procedure silmek için değişiklik yaparken kullanılan komutun yerine DROP komutu konulup, sistemdeki prosedürü ortadan kaldırabilirsiniz. Şunu unutmamak gerekir ki oluşturulan stored procedurelerin encryption özelliği var ise sadece sistem admin ve o procedure yapan kişi silebilir.

 DROP PROC SP_CalisanEkle

 

İyi Çalışmalar Herkese.

 

 

 

 

 

 

Yorum yapabilirsiniz..

En son haber ve ücretsiz eğitimlere ulaşmak için üye olabilirsiniz