Program komutları yazıldığı sırada akar. Ama çoğunlukla, bu akımı yönlendirmek gerekir. Bu iş için denetim yapılarından koşulları kullanabiliriz. Program akışını, belli mantıksal konullara göre istenen yöne saptıran denetim yapılarıdır.

Aşağıda şekil incelediğimizde condition yazan yer çalışmasını istediğimiz kodun çalışması için gereken koşul belirtiliyor eğer bu koşul doğru ise o zaman conditional code içinde sunduğumuz kodumuz çalışıyor ama  koşul yanlış ise bu şekle göre programımız sonlanıyor.

PL/SQL Koşullar - PL/SQL Conditions - PL/SQL if then else

Aşağıdaki çizelge de PL/SQL ‘de bulunan koşullu ifadeler bulumaktadır.

İfade Açıklama
IF-THEN IF- THEN- END IF;
Bu yapı if ‘in ardından belirtilen koşul sağlandığında then’in ardından gelen kod bloğu çalışır ve end if ile blok sonlanır. Zaten if’in ardındaki koşul sağlanmamış ise direk if then end if bloğu biter.
IF-THEN-ELSE IF-THEN-ELSE – END IF;
Bu koşul yapısında ise if koşuluna bir alternatif oluşturuyoruz.Yani eğer ilk koşul yanlış ise ya da null ise else’e git oradaki kodu çalıştır diye komut vermiş oluyoruz. Bu yapı sayesinde koşul sağlansın ya da sağlanmasın sonunda herhangi bir kod ile bir aksiyon alıyoruz.
IF-THEN-ELSEIF IF-THEN-ELSEIF-ELSEIF-ELSE-END IF;
Bu koşul yapısında birden fazla koşul için kodunuzu destekleyebilirsiniz. Örnek vermek gerekirse notu 0 ile 40 arasındakiler için bir işlem 40 ile 60 arasındakiler için farklı bir işlem 60 ile 80 arasındakiler için farklı bir işlem bunların dışındaki şartlar için de başka bir ihtimal gibi uzatabiliriz.
CASE CASE
Bu koşul yapısında bir değişkenin istenilen koşullardeki değerlerine göre kod blokları çalıştırılıyor.
NESTED IF-THEN-ELSE İç içe if’li bloklar oluşturabilirsiniz.

IF-THEN

DECLARE
   v_num1 NUMBER := 5;
   v_num2 NUMBER := 3;
   v_temp NUMBER;
BEGIN
   -- v_num1 sayisi v_num2 den buyukse if sarti saglanacaktir sartinda ise v_num1 ile v_num2 degerleri degistirilmistir
   IF v_num1 > v_num2 THEN
      v_temp := v_num1;
      v_num1 := v_num2;
      v_num2 := v_temp;
   END IF;

   -- Son durumda v_num1 ve v_num2 nin degerlerini ekrana yazdiririz
   DBMS_OUTPUT.PUT_LINE ('v_num1 = '||v_num1);
   DBMS_OUTPUT.PUT_LINE ('v_num2 = '||v_num2);
END;
DECLARE
   emp_id       hr.employees.employee_id%TYPE := 100;
   emp_salary   hr.employees.salary%TYPE;
BEGIN
	--employee_id si 100 olan personelin maasini degiskenimize veririz
   SELECT salary INTO emp_salary FROM hr.employees WHERE employee_id = emp_id;

   --maasi 30000 den az ise 1000 artiririz
   IF emp_salary <= 30000 THEN
      UPDATE hr.employees SET salary = salary + 1000 WHERE employee_id = emp_id;
      DBMS_OUTPUT.put_line ('Maas Guncellendi');
   END IF;
END;

IF-THEN-ELSE

Diagramı aşağıdaki gibidir. Bu koşul yapısında ise if koşuluna bir alternatif oluşturuyoruz.Yani eğer ilk koşul yanlış ise ya da null ise else’e git oradaki kodu çalıştır diye komut vermiş oluyoruz. Bu yapı sayesinde koşul sağlansın ya da sağlanmasın sonunda herhangi bir kod ile bir aksiyon alıyoruz.

PL/SQL if-then-else

DECLARE
   v_exam_score NUMBER := &exam_score;
BEGIN
   IF v_exam_score >= 70 THEN
      DBMS_OUTPUT.PUT_LINE ('Sinavi '||v_exam_score||' puanla gectiniz');
   ELSE
      DBMS_OUTPUT.PUT_LINE ('Sinavdan '||v_exam_score||' puanla kaldiniz');
  END IF;
END;

 

DECLARE
   v_num NUMBER := &sv_user_num;
BEGIN
   /* MOD(x,y) fonksiyonu iki sayısal deger alır ve x’in y’ye bölümünden kalanı verir.
   Eger mod sonucu 0 ise sayimiz cift sayi 0 dan farkli ise tek sayidir */
   IF MOD(v_num,2) = 0  THEN
      DBMS_OUTPUT.PUT_LINE (v_num||' cift sayi');
   ELSE
      DBMS_OUTPUT.PUT_LINE (v_num||' tek sayi');
   END IF;
   DBMS_OUTPUT.PUT_LINE ('Bitti');
END;

NOT : NULL sonuç dönersede ELSE altındaki komutlar çalıştırılır.

DECLARE
   v_num1 NUMBER := 0;
   v_num2 NUMBER;
BEGIN
   IF v_num1 = v_num2 THEN
      DBMS_OUTPUT.PUT_LINE ('v_num1 = v_num2');
   ELSE
      DBMS_OUTPUT.PUT_LINE ('v_num1 != v_num2');
  END IF;
END;

 

IF-THEN-ELSEIF

DECLARE
   a number(3) := 100;
BEGIN
-- a nin degeri 10 a esit mi?
   IF ( a = 10 ) THEN
     -- eger 10 a esit ise asagidakini yaz
      dbms_output.put_line('Value of a is 10' );
-- a nin degeri 10 a esit degil ise 20 ye esit mi?
   ELSIF ( a = 20 ) THEN
     -- eger a 20 ye esit ise asagidakini yaz
      dbms_output.put_line('Value of a is 20' );
-- a nin degeri 10 a ,20 ye esit degil ise 30 a esit mi?
   ELSIF ( a = 30 ) THEN
     -- eger anin degeri 30 a esit ise asagidakini yaz
      dbms_output.put_line('Value of a is 30' );
   ELSE
    --eger ne 10,ne 20,ne 30 hiçbirine esit degilse asagidakini
    --yaz
       dbms_output.put_line('a degeri yukaridakilerin hiçbirine eşit degil');
   END IF;
    -- a nin degeri ne olursa olsun asagidakileri yaz
   dbms_output.put_line('a nin degeri: '|| a );
END;
/

CASE

CASE ile ilgili diagram aşağıdaki gibidir. Bu koşul yapısında bir değişkenin istenilen koşullardeki değerlerine göre kod blokları çalıştırılıyor.

PL/SQL Koşullar - PL/SQL Conditions - PL/SQL case

DECLARE
   notum char(1) := 'A';
BEGIN
-- Case'imiz notum değerinin neye eşit olduğunu bulmak
   CASE notum
      -- notum 'A' ya eşit ise 'Muhteşem'
      when 'A' then dbms_output.put_line('Muhteşem');
      -- notum 'B' ye eşit ise 'Çok iyi'
      when 'B' then dbms_output.put_line('Çok iyi');
      -- notum 'C' ye eşit ise 'İyi'
      when 'C' then dbms_output.put_line('İyi');
      -- notum 'D' ye eşit ise 'Geçer'
      when 'D' then dbms_output.put_line('Geçer');
      -- notum 'F' ye eşit ise 'Kötü Kaldın'
      when 'F' then dbms_output.put_line('Kötü Kaldın');
      -- Eğer caselerimden hiçbiri sağlanamadıysa o zaman
      -- 'Böyle bir not yok' mesajını ekrana basıyoruz
      else dbms_output.put_line('Böyle bir not yok');
   END CASE;
END;
/

NESTED IF-THEN-ELSE

DECLARE
   a   NUMBER (3) := 100;
   b   NUMBER (3) := 200;
BEGIN
   --CHECK THE BOOLEAN condition
  IF ( a = 100 ) THEN
    --IF condition IS TRUE THEN CHECK the following
      IF ( b = 200 ) THEN
        --IF condition IS TRUE THEN PRINT the following
        DBMS_OUTPUT . put_line ( 'Value of a is 100 and b is 200' );
        END IF;
      END IF;
      DBMS_OUTPUT . put_line ( 'Exact VALUE of a is : ' || a );
      DBMS_OUTPUT . put_line ( 'Exact value of b is : ' || b );
    END;

Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe

Kaynaklar;
http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm
https://developersdaily.wordpress.com
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
https://oracle-base.com/articles/misc/introduction-to-plsql

3,704 total views, 2 views today