Mysql-stored procedures ( Bölüm 1 )


 
Sorunsuz çalıştı DELIMITER // diyerek başlattık ve yine // diyerek işlemi sonlandırdık.Son olarakta DELIMITER ; diyerekte artık DELIMITER olarak (;) kullanmak istemediğimizi belirttik.Özetle DELIMITER bir sorguyu çalıştırmak için gerekli olan işareti belirler.Burda bir konuya dikkatinizi çekmek istiyorum MySQL aynen Pascal ve Visual Basic dillerinde oldugu gibi blok yapısında bir dildir yani BEGIN ve END arasına gerekli kodlar ve işlemler yazılır.Şimdi döngülere ve daha iler konulara geçmeden önce ufak bir iki şey anlatmak istiyorum.      SP'lerin haricinde aynı zamanda Stored Functions'da bulunmaktadır.Aynı söz dizimini kullanan bu yapıları ayrıyeten anlatmıcam zaten SP'ler onlarıda kapsamaktadır.Birde daha önce yazdığınız bir SP'yi iptal etmek istiyorsanız.

mysql>DROP PROCEDURE ;

yada olup olmadığından emin değilseniz şuda olabilir

mysql>DROP PRODURE IF EXISTS $$;

Eğer daha önce herhanği bir programlama diliyle uğraştıysanız MySQL'de döngüler size oldukca kolay gelicektir.IF ve LOOP(While,until yada repeat gibi düşünebilirsiniz) sadece bu iki döngü bize güçlü sorgular yazmamız için yeterde artıyor bile.Bunlar üzerine küçük örnekler yapıp hemen geçmek istiyorum çünkü bu yazıyı okuyan insanların en azından temel düzeyde nelerden bahsetiğimi anladıgını düşünüyorum.

Şimdi az çok neyin ne olduğunu bildiğimize göre ufak bir program yazalım.

mysql>CREATE PROCEDURE naber(IN inVar VARCHAR(10), OUT outVar VARCHAR(30))
->BEGIN
->   IF(inVar = "iyi") THEN
->     SET outVar = "Güzel.";
->   ELSEIF(invar =“kötü“) THEN
->     SET outVar = "Neden kötüsü.";
->   ELSE
->     SET outVar=“Ne dedin?“;
->   END IF;
-> END //

BU kod parcasında ilk satıra dikkatinizi çekmek isterim.

IN inVar VARCHAR(10), OUT outVar VARCHAR(30)) burda 2 adet değişken tanıtıyoruz „IN“ olarak tanıtıgımız SP'ye dışardan yollıyıcagımız parametredir.“OUT“ olarak gösterdigimizde SP'nin dışarı çıkartıcagı değerdir.Bunu returne benzerebilirsiniz gerci RETURN olayıda mevcuttur onuda başka bir örnekte gösterelim.Buda şunuda eklemem gerek sanırım eğer bir değer döndürmesini istemiyorsanız IN yada OUT yazmadan direk giricek değişkenleride yazabilirsiniz.Neyse bu SP'yi çalıştırmak için.

mysql>CALL Baber("Naber", @a);
mysql>SELECT @a//;

Dersek çalışır burda ne yaptıgımıda açıklamak istiyorum SP'ye „naber“ değişkenini yollıyıp çıktıyıda @a değişkenine atadım.Peki çıktıyı değişken kullanmadan direk SP çalıştıgı anda nasıl alabiliriz sorusu aklınıza gelmiştir.Birde bu örnekte MySQL'in sevdigim başka bir yönünüde görücez.MySQL içersindeki hazır fonksiyonlar.

mysql>CREATE PROCEDURE kare(sayi INT)
->BEGIN
->DECLARE l_kare FLOAT;
->SET l_kare=SQRT(sayi);
->SELECT l_kare;
END //
mysql>CALL kare(12);//

Gördügünüz gibi hem SP içersinden direk çıktıyı verdik hemde bir adet fonksiyon kullandık çok zor değilmiş gercekten.Hazır elim deymişken kendi fonksiyonlarınızıda CREATE FUNCTION diyere hazırlayabiliceginizi ve başka fonksiyonlar yada SP'ler içersinde çagrabiliceginizi unutmayın.

Şimdi LOOP'lara geçmeden önce IF ve değişkenler hakkında havada kalanlar doldurmam lazım.

Öncelikle IF sadece yukarda bahsettigim kadar kısa bir olay değil öncelikle IF yerine CASE kullanabilirsiniz ben pek kullanmamda :)

CASE degisken
WHEN durum1 THEN yapılıcaklar
WHEN durum2 THEN yapılıcaklar
ELSE hiç biri dogru degilse olucaklar
END CASE

Tarih:
Hit: 9302
Yazar: sandman



Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.