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 :
- 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 :
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.
Benzer Yazılar
Kariyer
- Yazılım Geliştirme Uzmanları
MobilMutfak - Java Yazılım Uzmanı
Yapı Kredi Emeklilik - Java Yazılım Uzmanı
Universal Bilgi Teknolojileri - Yazılım Geliştirmeci ve Proje Mühendisi
Yapı ve Kredi Bankası - Java Yazılım Uzmanı
Abaküs Finansal Yaz. A.Ş








