1. PL/SQL de kontrol yapıları PL/SQL de kontrol yapıları genel olarak IF, CASE LOOP, WHILE, FOR ile gerçekleştirilir. Tabi bu deyimlerinde kendi içinde alt basamakları bulunmaktadır. Şimdi sırası ile bu yapılara göz atalım IF : Türkçede eğer anlamına gelen bu komutun pl/sql dilinde genel kullanım sözdizimi şu şekildedir; IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statements;] Bu komutla ilgili bir örnek yapacak olursak; vize_notu number:=50; IF vize_notu < 80 THEN DBMS_OUTPUT.PUT_LINE(' Dersten Kaldınız '); Yukardaki kodda vize_notu şeklinde bir değişken tanımlıyoruz ve değerini 50 ye eşitliyoruz.daha sonra IF komutumuzla notumuz 80 den düşük ise ki öyle Dersten Kaldınız diye bir mesaj veriyoruz.sql Developerdaki ekran görüntümüz şu şekilde oluyor.
IF THEN ELSE: Yukardaki örnekte şartımız sadece bir durum için geçerliydi.if THEN ELSE ile şartı sağladığı ve/veya sağlamadığı durumlarda sonuç veren bir yapımız bulunmaktadır. vize_notu number:=90; IF vize_notu < 80 THEN DBMS_OUTPUT.PUT_LINE(' Dersten Kaldınız '); ELSE DBMS_OUTPUT.PUT_LINE(' Dersten Geçtiniz '); Vize notumuz 90 olduğu için ekran görüntümüzde Dersten Geçtiniz yazacaktır. IF ELSIF ELSE: IF THEN ELSE yapısından farkı birçok durum için birçok farklı sonuç üretebilmesidir.aşağıdaki kodda görüldüğü gibi vize notumuzu=40 yaptık. Vize notumuzun 95 ten büyük olduğu durumda notumuzu AA verdir. Aynı şeyi 90,70 içinde yaptık.ve 70 ve 70 ten küçük her alınan notu DD olarak belirttik. vize_notu NUMBER:=40; IF vize_notu > 95 THEN DBMS_OUTPUT.PUT_LINE(' AA Aldınız '); ELSIF vize_notu > 90 THEN DBMS_OUTPUT.PUT_LINE(' BB Aldınız '); ELSIF vize_notu > 70 THEN DBMS_OUTPUT.PUT_LINE(' CB Aldınız '); ELSE DBMS_OUTPUT.PUT_LINE(' DD Aldınız '); Ekran görünütümüz
IF kontrol yapılarını bitirirken küçük bir hatırlatma olarak; Eğer değişkene bir değer atamadıysanız her zaman en sonraki şartınızın alacağı değeri alacaktır. vize_notu NUMBER; IF vize_notu > 95 THEN DBMS_OUTPUT.PUT_LINE(' AA Aldınız '); ELSIF vize_notu > 90 THEN DBMS_OUTPUT.PUT_LINE(' BB Aldınız '); ELSIF vize_notu > 70 THEN DBMS_OUTPUT.PUT_LINE(' CB Aldınız '); ELSE DBMS_OUTPUT.PUT_LINE(' DD Aldınız '); DD Aldınız yazacaktır
CASE: IF ELSIF ELSE yapısına benzer.fakat bence daha kullanışlı ve pratikdir.çalışma mantığı aynıdır.belirli şartlara göre belirli sonuçları vermektedir. CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2... WHEN expressionn THEN resultn [ELSE resultn+1] Şimd bu komutla ilgili örnekler yapalım notum number := UPPER('¬um'); degerlendirme VARCHAR2(100); degerlendirme := CASE notum WHEN '100' THEN 'AA' WHEN '90' THEN 'BB' WHEN '60' THEN 'CC' ELSE 'Belirtilen Notları Girmediniz' DBMS_OUTPUT.PUT_LINE ('notum: ' notum ' degerlendirme ' degerlendirme); Yukardaki kodda kullanıcıdan belirttiğimiz değerleri girmesini istiyoruz.100 girdiğinde ekranımızda AA 90 yazdığında BB,60 yazdığında CC olacaktır.bunlar haricinde bir değer girdiğimizde ise Belirtilen Notları Girmediniz şeklinde mesaj verecektir.
Ekran görüntüsü Diğer bir örnek verecek olursak select table_name, CASE owner WHEN 'SYS' THEN 'SYS Şeması' WHEN 'SYSTEM' THEN 'SYSTEM Şeması ' ELSE 'Başka bir şema' END from all_tables; LOOPS: Döngü anlamına gelen bu deyimde bir sonuç kümesinin içinde birçok sıralama ve döngü oluşturulabilir.basic loop,for loop ve while loop şeklinde kullanılabilir. Basic Loop(Genel Kullanım) : loop sözdiziminin en basit ve genel kullanım ifadesidir. LOOP statement1;... EXIT [WHEN condition]; Şeklindedir.
Örnek olarak ; x NUMBER := 0; LOOP DBMS_OUTPUT.PUT_LINE ('x in içerdeki degeri: x = ' TO_CHAR(x)); x := x + 1; IF x > 5 THEN EXIT; DBMS_OUTPUT.PUT_LINE(' Döngüden sonraki değeri: x = ' TO_CHAR(x)); X değişkenimize 0 a eşitledik ve döngüyü başlattık.x in döngüye girmeden önceki ve döngüye girdikten sonraki değerlerini ekrana yazdık.ekran görüntüsü ;
WHILE LOOP: while sözdizimi ile kullanıldığı yapılardır.genel yapısı WHILE condition LOOP statement1; statement2;... Şeklindedir. sayi NUMBER := 0; WHILE sayi <= 10 LOOP sayi := sayi + 1; DBMS_OUTPUT.PUT_LINE('Sayının değeri ' sayi); Yukardaki kodda 1 den 10 a kadar sayıları yazdırıyoruz ve sayının en son değerini ekrana basıyoruz FOR LOOPS: Genel kullanımı şu şekildedir FOR counter IN [REVERSE] lower_bound..upper_bound LOOP statement1; statement2;... Örnek verecek olursak; FOR sayi IN 1..15 LOOP dbms_output.put_line (sayi);