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



Aynı zamanda

CASE
WHEN degişken1 > değişken2 THEN yapılıcaklar
WHEN degisken1 < degisken2 THEN yapılıcaklar
ELSE hiç biri dogru degilse olucaklar
END CASE

Bunlar haricinde IFNULL ve NULLIF kontrol yapılarıda mevcuttur ama onları konumuzu uzatmamak için burda açıklamıyoruz.DECLARE hakkında da eklemedigim bir sürü şey oldugunun farkındayım hatta belkide en can alıcı noktalarını kullanmadık Condision, Handerler ve Cursor. Çok kısa geçicem onlarıda daha sonra ilerki yazılarımda yada özel sorularınızda cevap vericem hepsine.

Handerler ve Condision çogunlukla beraber kullanılır ve daha çok hata yakalamak yada kontrol için kullanılırlar.Şimdi bir senaryomuz olsun, tablodan veri eklerken eğer o id'de başka bir veri olması durumunda INSERT yerine UPDATE kullanmak istiyoruz.

   DECLARE anahtar INT DEFAULT 0;
   DECLARE anahtar_tekrarı CONDITION FOR 1062;
   DECLARE CONTINUE HANDLER FOR anahtar_tekrarı SET anahtar =1;
 
   INSERT INTO urunler (urun_kodu, urun_adi)
   VALUES (d_urun_kodu, d_urun_adi);
   IF anahtar_tekrarı THEN
     UPDATE urunler
       SET urun_adi=d_urun_adi
     WHERE urun_kodu=d_urun_kodu;
   END IF;

Bu kod kısacana şu işi yapıyor.Eğer yeni bir ürün eklemeye çalışırken zaten o ürün mevcutsa(1062 hatası) bu durumda INSERT yerine güncelleme yani UPDATE kullanıyor.Peki bunu nasıl yapıyor. DECLARE anahtar_tekrarı CONDITION FOR 1062; yani bu durumla karşılaşıldıgı taktirde anahtar_tekrarı denilen bir değişken yaratıyor ve HANDLER yani hata durumunda çalışan özel değişkenimizi çagrıyor.

DECLARE CONTINUE HANDLER FOR anahtar_tekrarı SET anahtar =1; Burda hata durumunda DEFAULT değeri 0 olan anahtar değişkenini 1 yapıyor.Dikkatinizi çekerse bu aşağıdaki IF için kritik birşey.Son olarak HANDLER'ın çeşitli özellikleri vardır bunlar CONTINUE,UNDO ve EXIT'tir.EXIT durumuyla karşılaşır karşılaşma HANDLER tetiklenir ve işlemden çıkılır.CONTINUE işleme devam ederken UNDO o noktaya kadar yapılan tüm işlemleri geri alır. Umarım bunun ne kadar kritik ve kullanışlı oldugunu anlamışsınızdır.Örnek vermek gerekirse bu SP'yi kullanarak tek bir seferde programınız içersinden(Web,Desktop fark etmez) verinin olup olmadıgını varsa güncellemesi gerektigini yoksada eklemesini saglıyorsunuz.Neden fazladan kullanmıcağınız kodu yazınki MySQL kontrolü sizin yerinize yaparken.

Döngüler genel anlamda birden çok çalışmasını istediginiz yada özel bir durum oluşuncaya kadar çalışmasına devam etmesini istediginiz durumlarda kullanılır.3 adet kullanılan döngü bulunmaktadır bunlar LOOP,WHILE ve REPEAT'tir.Tüm döngülerden LEAVE kullanarak çıkmanızda bu dilin ayrı bir güzelligi olsa gerek.Şimdi en basit örnek olan LOOP'la 10 kadar saydıralım.

->DECLERA sayac INT DEFAULT 0;
->sayacim:LOOP
->SET sayac=sayac+1;
->IF sayac=10 THEN
->LEAVE sayacim;
->END IF;
->END LOOP sayacim;
->SELECT „Saydım“;
->END; //

Tarih:
Hit: 9096
Yazar: sandman



Yorumlar


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