24 Mayıs 2008Mysql Stored Procedure Kullanımı
Bu yazım da sizlere Mysql in stored procedure olayından bahsedeceğim. Nedir bu stored procedure denilen şey diye düşünüyor olabilirsiniz hemen açıklıyayım bellekte saklanmış prosedürler yani sql sorguları diyebiliriz.
Uygulamalarımız da kullandığımız sql cümleleri her defasında yeniden derlenir ve bize sonucu döndürürler. Peki stored procedur un ne farkı var ?
Bu özellik MySQL 5+ versiyonundan itibarenden geçerlidir.
Stored Procedure ile çok sık kullandığımız sql cümlelerimizi mysql e bir kere giriyoruz ve ilk defaya mahsus derleniyor. Sonrasın da ise oluşturduğumuz stored procedur u kullandığımız da sql cümlelerimiz yeniden derlenmiyor direk bize sonucu veriyor.
Bu özelliği daha çok büyük çaplı projelerde, online hit i yüksek sitelerimiz de kullanabiliriz. Küçük uygulamalar için kullanmak biraz hamallık olur düşüncesindeyim.
Örnek bir Stored Procedure oluşturalım ve ilgili tablomuz ile nasıl kullanabiliriz ona bakalım.
Tablo Adı:
Yazar
id : int
ad: varchar
soyad: varchar
yas: int
Evet yukarıdaki gibi bir tablo elde ettik. Şimdi bu tablo ile neler yapmak istiyoruz onu belirlemeliyiz. Ben bu tablo ile 3 işlem yapmak istiyorum.
1.cisi Yazar var mı yok mu kontrol etmek
2.cisi Yazar id si ile ilgili yazar bilgilerini çekmek
3.cüsü Verilen yazar id sine göre ilgili yazarı silmek.
Bu üç işlemi yapan örnek stored procedurümüz aşağıdadır.
DELIMITER $$ DROP PROCEDURE IF EXISTS `test`.`yazar_islem` $$ CREATE DEFINER = `root`@`localhost` PROCEDURE `test`.`yazar_islem` (in yazarid int, in islem int) BEGIN CASE islem WHEN 1 THEN SELECT id FROM yazar WHERE id = yazarid; WHEN 2 THEN SELECT ad,soyad,yas FROM yazar WHERE id = yazarid; WHEN 3 THEN DELETE FROM yazar WHERE id = yazarid; ELSE SELECT 'Hatali İslem'; END CASE; END $$ DELIMITER ;
yukarıda daha önceden yapmak istediğimiz işlemleri yapacak olan prosedürümüzü tanımladık. şimdi bu prosedürü .sql uzantılı bir dosyaya kaydedip veritabanınıza yüklediğiniz de prosedürümüz oluşmuş olcak.
Şimdi gelelim bu satırlar neyi ifade ediyor. Satır Satır Açıklayalım.
DELIMITER $$ $$ DELIMITER
bu ifade bir veri kümesini başlangıç ve sonunu işaretlemek için kullanılır.
DROP PROCEDURE IF EXISTS `test`.`yazar_islem` $$
bu satırda ise eğer test veritabanında yazar_islem adında bir prosedür daha önceden tanımlanmış ise bunu kaldırıyor.
CREATE DEFINER = `root`@`localhost` PROCEDURE `test`.`yazar_islem` (in yazarid int, in islem int)
bu satırda ise se CREATE tümcesi ile prosedür oluşturuluyor. DEFINER tümcesi ile oluşturulan prosedürün hangi kullanıcının kullanıma sahip olduğunu tanımlıyor. PROCEDURE tümcesi ile oluşturacağımız prosedürün adını veriyoruz.
Buraya kadar herşey tamam ama peki in yazarid int ve in islem int da ne oluyor ? Buradaki in oluşan prosedüre bir argüman girileceği ve bu belirtilen argümünın da veri tipinin int olacağı söyleniyor. Aynısı islem içinde geçerli.
3 değişik argüman alıyor. Bunlar;
in : veri girişi için kullanılıyor
out : veri çıkışı için kullanılıyor
inout : hem veri girişi hem de veri çıkışı için kullanılıyor.
BEGIN ve END
biz oluşturacağımız prosedür sql cümlelerini bu iki tümce arasında belirteceğiz.
CASE islem
satırı ile islem argümanın alacağı değeri WHEN ile kontrol edip ilgili işlemi döndüreceğiz. Yani islem değeri 2 ise bize yazar bilgilerini çekicek 3 ise silecek vb.
ELSE SELECT
satırı ile herhangi bir islem seçimi yapılmamışsa uyarı vericek.
END CASE
ile prosedürümüzü oluşturan cümleyi sonlandırıyoruz.
Oluşturulan bu Stored Procedure yi nasıl kullanacağız ? Bunun için phpmyadmin arayüzünü kullanabilirsiniz veya mysql komut satırından da faydalanabilirsiniz.
Ben komut satırını kullanarak örnek vereceğim. Öncelik Mysql Komut Satırını Açınız. Sizden şifre isteycektir eğer istemez se mysql -u root komutunu girin ve Şifre kısmına mysql bağlantı şifrenizi yazın ve enterleyin.
daha sonra stored procedur u hangi veritabanı için oluşturduysanız o veritabanına
use veritabani_adi;
komutunu vererek geçiş yapınız.
Son olarak oluşturduğumuz proceduru çağırmak için aşağıdaki komutu veriniz.
call yazar_islem(1,2);
evet bunun sonucunda size id si 1 olan yazarın bilgilerini getirecektir. 2 yerine 3 derseniz o yazarı silecektir.
Örneğimiz le ilgili resim:

görüldüğü üzere işlem sonucumuz da yazar tablosunda bulunan YUSUF KOÇ adlı yazar bilgilerini getirdi.
