{"id":32,"date":"2009-01-12T06:28:00","date_gmt":"1970-01-01T00:00:00","guid":{"rendered":"http:\/\/www.yazilimmutfagi.com\/?p=32"},"modified":"2009-01-12T06:28:00","modified_gmt":"1970-01-01T00:00:00","slug":"stored-procedurelere-giris","status":"publish","type":"post","link":"https:\/\/www.yazilimmutfagi.com\/index.php\/2009\/01\/12\/stored-procedurelere-giris\/","title":{"rendered":"Stored Procedurelere Giris"},"content":{"rendered":"<p><strong style=\"\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Stored Procedurelere Giris<\/span><\/strong><span style=\"\"><span style=\"font-size: small;\"><span style=\"font-family: Calibri;\"><span style=\"\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Bu ilk yazimda size SQL server&rsquo;lardaki stored procedure&rsquo;lerden bahsedecegim. Stored procedureler SQL server&rsquo;da saklanan, sql ifadelerini barindiran metotlar gibi d&uuml;s&uuml;n&uuml;lebilir. Veritabani programlamaya ilk baslayanlar SQL ifadelerini kullandiklari programlama dilinde yazarlar(c#, vb,&hellip;). bu ilk &ouml;grenim i&ccedil;in uygundur ancak ger&ccedil;ek hayattaki projelerde SQL ifadeleri stored procedurelerde saklanir. Stored procedureler bir kere derlenirler ama programlama dilindeki SQL ifadeleri program her &ccedil;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&rsquo;da hata verir ve bu da programlama a&ccedil;isindan k&ouml;t&uuml; bir durumdur. Stored procedureler SQL server&rsquo;da yaratildiktan sonra derlenir ve hatali olup olmadiklari orada anlasilabilir.<\/span><\/p>\n<p><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Simdi basit bir stored procedure &ouml;rnegi yapalim. <\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Create<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: blue;\">procedure<\/span> deneme <\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">As<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Select<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: gray;\">*<\/span> <span style=\"color: blue;\">from<\/span> denemetablosu<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Go<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><a href='www.yazilimmutfagi.com'>.<\/a><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Bu procedure anlasilacagi gibi veritabanimizdaki denemetablosu isimli tablodan b&uuml;t&uuml;n verileri &ccedil;eker. SQL c&uuml;mlesini istedigim kadar kompleks hale getirebiliriz. Zaten Stored procedurelerin amaci karmasik SQL c&uuml;mlelerini SQL&rsquo;de saklayip hep onu kullanmamizdir.<br \/>\nDaha &ouml;nceden olusturdugumuz bir stored Procedureu &ccedil;alistirmak i&ccedil;in procedure_ismini &ldquo;&ouml;rnegimizde deneme&rdquo; yazip Execute dememiz yeterli olacaktir. B&ouml;ylece denemetablosunda ne kadar veri varsa onlari g&ouml;rebiliriz.<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Stored procedureler metotlar gibi parametre alabilir ve deger d&ouml;nd&uuml;rebilirler.Simdi onunla ilgili basit bir &ouml;rnek g&ouml;sterelim.<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Create<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: blue;\">procedure<\/span> deneme<span style=\"color: gray;\">(<\/span>@deneme_ad <span style=\"color: blue;\">nvarchar<\/span><span style=\"color: gray;\">(<\/span>50<span style=\"color: gray;\">),<\/span><span style=\"\">&nbsp; <\/span>@ deneme_soyad<span style=\"\">&nbsp; <\/span><span style=\"color: blue;\">nvarchar<\/span><span style=\"color: gray;\">(<\/span>50<span style=\"color: gray;\">))<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">As<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Select<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: gray;\">*<\/span> <span style=\"color: blue;\">from<\/span> denemetablosu <span style=\"color: blue;\">where<\/span> AD<span style=\"color: gray;\">=<\/span>@deneme_ad <span style=\"color: gray;\">and<\/span> SOYAD <span style=\"color: gray;\">=<\/span>@deneme_soyad<\/span><\/p>\n<p><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Go<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Bu &ouml;rnek veritabanimizda kayitli olan denemetablosu isimli tablonun AD ve SOYAD kolonlarini kontrol ediyor ve eger aradigimiz ad ve soyadda kayitlar varsa onlarin b&uuml;t&uuml;n kolonlarini bize g&ouml;steriyor. <\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Bu procedure&rsquo;&uuml; kullanmak i&ccedil;in de procedure&rsquo;&uuml;n adini yazip yanina alacagi parametreleri &ccedil;ift tirnak i&ccedil;inde yazmamiz ve execute tusuna basmamiz yeterli olacaktir.<\/span><\/p>\n<p style=\"margin: auto 0cm;\" class=\"style4\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">deneme &ldquo;Emrah&rdquo;,&rdquo;Ko&ccedil;ak&rdquo;<\/span><\/p>\n<p><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">bu satir isletildigi zaman bize ad s&uuml;tununda Emrah ve soyad s&uuml;tununda Ko&ccedil;ak olan b&uuml;t&uuml;n verileri g&ouml;sterir. <\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Eger procedure&rsquo;&uuml;m&uuml;z sayisal bir deger aliyorsa (int, decimal gibi) o zaman &ccedil;ift tirnaga gerek yoktur.<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Simdi bir de return degeri ile ilgili biraz bilgi vermek istiyorum. Stored procedureler zaten select komutuyla bize verileri getirirler ama bazen return degerine ihtiya&ccedil; duyariz. Mesela veritabanina kayit yapmak istiyoruz ve kullanici adini belirleyici &ouml;zellik olarak atadik yani her kullanici adi birbirinden farkli olmali. Simdi b&ouml;yle bir veritabanina veri girmek istiyoruz ve kayit isleminin olup olmadigini da bilmek istiyoruz diyelim. Burada stored procedurelerin bir &ouml;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&rsquo;de degiskenler baslarina &ldquo;@&rdquo; ifadesi konularak tanimlanir. Simdi yukarida anlattigim gibi bir veritabani i&ccedil;in kayit procedure&rsquo;&uuml; yazalim. Tablomuzun adi KAYIT olsun. 3 tane kolonu olsun:<br \/>\nKULLANICI_ADI, AD, SOYAD<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Create<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: blue;\">procedure<\/span> KAYITYAP<span style=\"color: gray;\">(<\/span>@KADI <span style=\"color: blue;\">nvarchar<\/span><span style=\"color: gray;\">(<\/span>50<span style=\"color: gray;\">),<\/span> <\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\">@AD <span style=\"color: blue;\">nvarchar<\/span><span style=\"color: gray;\">(<\/span>50<span style=\"color: gray;\">),<\/span> <\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\">@SOYAD <span style=\"color: blue;\">nvarchar<\/span><span style=\"color: gray;\">(<\/span>50<span style=\"color: gray;\">))<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">AS<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Declare<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> @kayitkontrol <span style=\"color: blue;\">int<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Declare<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> @sonuc <span style=\"color: blue;\">int<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Set<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> @kayitkontrol<span style=\"color: gray;\">=(<\/span><span style=\"color: blue;\">select<\/span> <span style=\"color: fuchsia;\">count<\/span><span style=\"color: gray;\">(*)<\/span> <span style=\"color: blue;\">from<\/span> KAYIT <span style=\"color: blue;\">where<\/span> KULLANCI_ADI<span style=\"color: gray;\">=<\/span>@KADI<span style=\"color: gray;\">)<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">if<\/span><span style=\"font-size: 10pt; color: gray; font-family: &quot;Courier New&quot;;\">(<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\">@kayitkontrol<span style=\"color: gray;\">=<\/span>0<span style=\"color: gray;\">)<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">Begin<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">insert<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: blue;\">into<\/span> KAYIT<span style=\"color: gray;\">(<\/span>KULLANICI_ADI<span style=\"color: gray;\">,<\/span> AD<span style=\"color: gray;\">,<\/span>SOYAD<span style=\"color: gray;\">)<\/span> <span style=\"color: blue;\">values <\/span><span style=\"color: gray;\">(<\/span>@KADI<span style=\"color: gray;\">,<\/span>@AD<span style=\"color: gray;\">,<\/span>@SOYAD<span style=\"color: gray;\">)<\/span><\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">set<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> @sonuc<span style=\"color: gray;\">=<\/span>1<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">end<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">else<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">begin<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">set<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> @sonuc<span style=\"color: gray;\">=<\/span>0<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">end<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">return<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> @sonuc<\/span><\/p>\n<p style=\"margin: 0cm 0cm 0pt;\" class=\"MsoNormal\"><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">GO<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><a href='www.yazilimmutfagi.com'>.<\/a><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Yukaridaki procedure&rsquo;&uuml;n ne yaptigini kisaca anlatayim. &Ouml;ncelikle disarida kullanici adi, ad ve soyad olmak &uuml;zere 3 tane deger aliyor. Sonra iki tane degisken tanimliyoruz. Bu degiskenlerden ilki<span class=\"style31\"> @kayitkontrol<\/span>, tipi ise integer. Bu degiskeni veritabaninda ayni kullanici adinda kayit var mi yok mu onun i&ccedil;in kullaniyoruz.<br \/>\n<\/span><span style=\"font-size: 10pt; color: blue; font-family: &quot;Courier New&quot;;\">select<\/span><span style=\"font-size: 10pt; font-family: &quot;Courier New&quot;;\"> <span style=\"color: fuchsia;\">count<\/span><span style=\"color: gray;\">(*)<\/span> <span style=\"color: blue;\">from<\/span> KAYIT <span style=\"color: blue;\">where<\/span> KULLANCI_ADI<span style=\"color: gray;\">=<\/span>@KADI<\/span><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\"><br \/>\nsatiri veritabanindaki KAYIT isimli tabloda KULLANICI_ADI s&uuml;tununda bizim girdigimiz degerle ayni olan verilerin sayisini getiriyor. Eger veritabaninda ayni kullanici adiyla kayit yoksa bu deger 0 olarak d&ouml;ner. Kullandigimiz if ifadesiyle de eger bu deger 0 ise o zaman kayit yap diyoruz. Kullandigimiz ikinci degisken <span class=\"style31\">@sonuc<\/span> ise return degeri olarak kullaniliyor. Tipini integer olarak atadik. Eger kayit islemi yapilirsa 1 degerini atiyoruz yapilamadiysa 0 degerini atayip d&ouml;nd&uuml;r&uuml;yoruz ve kullandigimiz aray&uuml;z programi da bu degeri &rdquo;kayit yapildi&rdquo; ya da &ldquo;yapilamadi&rdquo; gibi kullanici tarafindan anlamli olan c&uuml;mlelere d&ouml;n&uuml;st&uuml;r&uuml;r. Bu islem tabi ki &ccedil;ok &ccedil;esitli sekillerde de yazilabilir, o programcinin d&uuml;s&uuml;ncesine kalmistir.<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Stored procedurelerde return degeri sadece matematiksel tipler olmalidir. Mesela yukaridaki &ouml;rnek i&ccedil;in eger return degerine &ldquo;kaydiniz basariyla yapildi&rdquo; seklinde string bir ifade d&ouml;nd&uuml;rseydik bu ifadeyi aray&uuml;z programimizda kullanamazdik. &Ouml;yle return degerleri atayip procedure&rsquo;&uuml;m&uuml;z&uuml; derledigimizde hata yazisi g&ouml;remeyiz ama bu sekilde yapmanin bir anlami yoktur ve yanlistir.<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Biraz da stored procedureleri d&uuml;zenlemeden bahsetmek istiyorum. &Ouml;rnegin kayityap procedure&uuml;m&uuml;z&uuml; degistirmek istiyoruz &ccedil;&uuml;nk&uuml; tablomuza bir s&uuml;tun daha ekledik, o zaman procedure&rsquo;&uuml; yaratirken kullandigimiz &ldquo;create&rdquo; ifadesi yerine &ldquo;alter&rdquo; yazmamiz yeterli olacaktir. Sonra alacagi degerleri tabloya g&ouml;re d&uuml;zenler ve procedurede istedigimiz degisikligi yapabiliriz<\/span><\/p>\n<p style=\"text-indent: 35.4pt;\"><span style=\"font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;\">Bu yazimda sizlere stored procedureler ile ilgili giris i&ccedil;in bir bilgi vermeye &ccedil;alistim. Diger yazilarimda stored procedurelerin C#ta kullanimini b&uuml;t&uuml;n y&ouml;nleriyle incelemeye &ccedil;alisacagim. G&ouml;r&uuml;smek &uuml;zere&hellip;<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Bu ilk yazimda size SQL server\u2019lardaki stored procedure\u2019lerden bahsedecegim. Stored procedureler SQL server\u2019da saklanan, sql ifadelerini barindiran metotlar gibi d&#252;s&#252;n&#252;lebilir. <\/p>\n","protected":false},"author":535,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[422],"tags":[4530,3877,4136],"_links":{"self":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/32"}],"collection":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/users\/535"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/comments?post=32"}],"version-history":[{"count":0,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/32\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/media?parent=32"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/categories?post=32"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/tags?post=32"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}