Stored Procedurelere Giris

Stored Procedurelere Giris               

Bu ilk yazimda size SQL server’lardaki stored procedure’lerden bahsedecegim. Stored procedureler SQL server’da saklanan, sql ifadelerini barindiran metotlar gibi düsünülebilir. Veritabani programlamaya ilk baslayanlar SQL ifadelerini kullandiklari programlama dilinde yazarlar(c#, vb,…). bu ilk ögrenim için uygundur ancak gerçek hayattaki projelerde SQL ifadeleri stored procedurelerde saklanir. Stored procedureler bir kere derlenirler ama programlama dilindeki SQL ifadeleri program her çalistiginda tekrar derlenir ve bu da bir zaman kaybi demektir. Diger yandan kullandigimiz dilde yazdigimiz SQL ifadelerinin dogru veya yanlis oldugunu o dil anlayamaz, dogru kabul eder ve derleme asamasinda hata meydana gelmez, ama o satir isletilecegi zaman yani runtime’da hata verir ve bu da programlama açisindan kötü bir durumdur. Stored procedureler SQL server’da yaratildiktan sonra derlenir ve hatali olup olmadiklari orada anlasilabilir.

Simdi basit bir stored procedure örnegi yapalim.

Create procedure deneme

As

Select * from denemetablosu

Go

.

Bu procedure anlasilacagi gibi veritabanimizdaki denemetablosu isimli tablodan bütün verileri çeker. SQL cümlesini istedigim kadar kompleks hale getirebiliriz. Zaten Stored procedurelerin amaci karmasik SQL cümlelerini SQL’de saklayip hep onu kullanmamizdir.
Daha önceden olusturdugumuz bir stored Procedureu çalistirmak için procedure_ismini “örnegimizde deneme” yazip Execute dememiz yeterli olacaktir. Böylece denemetablosunda ne kadar veri varsa onlari görebiliriz.

Stored procedureler metotlar gibi parametre alabilir ve deger döndürebilirler.Simdi onunla ilgili basit bir örnek gösterelim.

Create procedure deneme(@deneme_ad nvarchar(50),  @ deneme_soyad  nvarchar(50))

As

Select * from denemetablosu where AD=@deneme_ad and SOYAD =@deneme_soyad

Go

Bu örnek veritabanimizda kayitli olan denemetablosu isimli tablonun AD ve SOYAD kolonlarini kontrol ediyor ve eger aradigimiz ad ve soyadda kayitlar varsa onlarin bütün kolonlarini bize gösteriyor.

Bu procedure’ü kullanmak için de procedure’ün adini yazip yanina alacagi parametreleri çift tirnak içinde yazmamiz ve execute tusuna basmamiz yeterli olacaktir.

deneme “Emrah”,”Koçak”

bu satir isletildigi zaman bize ad sütununda Emrah ve soyad sütununda Koçak olan bütün verileri gösterir.

Eger procedure’ümüz sayisal bir deger aliyorsa (int, decimal gibi) o zaman çift tirnaga gerek yoktur.

Simdi bir de return degeri ile ilgili biraz bilgi vermek istiyorum. Stored procedureler zaten select komutuyla bize verileri getirirler ama bazen return degerine ihtiyaç duyariz. Mesela veritabanina kayit yapmak istiyoruz ve kullanici adini belirleyici özellik olarak atadik yani her kullanici adi birbirinden farkli olmali. Simdi böyle bir veritabanina veri girmek istiyoruz ve kayit isleminin olup olmadigini da bilmek istiyoruz diyelim. Burada stored procedurelerin bir özellginden daha bahsetmek istiyorum, stored procedurelerde diger dillerdeki gibi if, else, next, count gibi deyimleri de kullanabiliriz ve degisken tanimlayip onlara deger atayabiliriz. T-SQl’de degiskenler baslarina “@” ifadesi konularak tanimlanir. Simdi yukarida anlattigim gibi bir veritabani için kayit procedure’ü yazalim. Tablomuzun adi KAYIT olsun. 3 tane kolonu olsun:
KULLANICI_ADI, AD, SOYAD

Create procedure KAYITYAP(@KADI nvarchar(50),

@AD nvarchar(50),

@SOYAD nvarchar(50))

AS

Declare @kayitkontrol int

Declare @sonuc int

Set @kayitkontrol=(select count(*) from KAYIT where KULLANCI_ADI=@KADI)

if(@kayitkontrol=0)

Begin

insert into KAYIT(KULLANICI_ADI, AD,SOYAD) values (@KADI,@AD,@SOYAD)

set @sonuc=1

end

else

begin

set @sonuc=0

end

return @sonuc

GO

.

Yukaridaki procedure’ün ne yaptigini kisaca anlatayim. Öncelikle disarida kullanici adi, ad ve soyad olmak üzere 3 tane deger aliyor. Sonra iki tane degisken tanimliyoruz. Bu degiskenlerden ilki @kayitkontrol, tipi ise integer. Bu degiskeni veritabaninda ayni kullanici adinda kayit var mi yok mu onun için kullaniyoruz.
select count(*) from KAYIT where KULLANCI_ADI=@KADI
satiri veritabanindaki KAYIT isimli tabloda KULLANICI_ADI sütununda bizim girdigimiz degerle ayni olan verilerin sayisini getiriyor. Eger veritabaninda ayni kullanici adiyla kayit yoksa bu deger 0 olarak döner. Kullandigimiz if ifadesiyle de eger bu deger 0 ise o zaman kayit yap diyoruz. Kullandigimiz ikinci degisken @sonuc ise return degeri olarak kullaniliyor. Tipini integer olarak atadik. Eger kayit islemi yapilirsa 1 degerini atiyoruz yapilamadiysa 0 degerini atayip döndürüyoruz ve kullandigimiz arayüz programi da bu degeri ”kayit yapildi” ya da “yapilamadi” gibi kullanici tarafindan anlamli olan cümlelere dönüstürür. Bu islem tabi ki çok çesitli sekillerde de yazilabilir, o programcinin düsüncesine kalmistir.

Stored procedurelerde return degeri sadece matematiksel tipler olmalidir. Mesela yukaridaki örnek için eger return degerine “kaydiniz basariyla yapildi” seklinde string bir ifade döndürseydik bu ifadeyi arayüz programimizda kullanamazdik. Öyle return degerleri atayip procedure’ümüzü derledigimizde hata yazisi göremeyiz ama bu sekilde yapmanin bir anlami yoktur ve yanlistir.

Biraz da stored procedureleri düzenlemeden bahsetmek istiyorum. Örnegin kayityap procedureümüzü degistirmek istiyoruz çünkü tablomuza bir sütun daha ekledik, o zaman procedure’ü yaratirken kullandigimiz “create” ifadesi yerine “alter” yazmamiz yeterli olacaktir. Sonra alacagi degerleri tabloya göre düzenler ve procedurede istedigimiz degisikligi yapabiliriz

Bu yazimda sizlere stored procedureler ile ilgili giris için bir bilgi vermeye çalistim. Diger yazilarimda stored procedurelerin C#ta kullanimini bütün yönleriyle incelemeye çalisacagim. Görüsmek üzere…

4 thoughts on “Stored Procedurelere Giris

Bir cevap yazın

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