PL/SQL ‘e yeni başlayan arkadaşlarımız için bir yazı dizisi hazırlamak istiyorum.Bunun için 1. Makalemizi ve 2. Makalemizi yayınlamıştım.Şimdide kontrol yapıları ile 3. Makalemizle devam edelim.
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 THENstatements;] [ELSE
statements;]
END IF;
Bu komutla ilgili bir örnek yapacak olursak;
DECLARE
vize_notu number:=50;
BEGIN
IF vize_notu < 80
THEN
DBMS_OUTPUT.PUT_LINE(‘ Dersten Kaldınız ‘);
END IF;
END;
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.
DECLARE
vize_notu number:=90;
BEGIN
IF vize_notu < 80
THEN
DBMS_OUTPUT.PUT_LINE(‘ Dersten Kaldınız ‘);
ELSE
DBMS_OUTPUT.PUT_LINE(‘ Dersten Geçtiniz ‘);
END IF;
END;
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.
DECLARE
vize_notu NUMBER:=40;
BEGIN
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 ‘);
END IF;
END;
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.
DECLARE
vize_notu NUMBER;
BEGIN
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 ‘);
END IF;
END;
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]END;
Şimd bu komutla ilgili örnekler yapalım
DECLARE
notum number := UPPER(‘¬um’);
degerlendirme VARCHAR2(100);
BEGIN
degerlendirme :=
CASE notum
WHEN ‘100’ THEN ‘AA’
WHEN ’90’ THEN ‘BB’
WHEN ’60’ THEN ‘CC’
ELSE ‘Belirtilen Notları Girmediniz’
END;
DBMS_OUTPUT.PUT_LINE (‘notum: ‘|| notum || ‘
degerlendirme ‘ || degerlendirme);
END;
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];
END LOOP;
Şeklindedir.
Örnek olarak ;
DECLARE
x NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE (‘x in içerdeki degeri: x = ‘ || TO_CHAR(x));
x := x + 1;
IF x > 5 THEN
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘ Döngüden sonraki değeri: x = ‘ || TO_CHAR(x));
END;
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;
. . .
END LOOP;
Şeklindedir.
DECLARE
sayi NUMBER := 0;
BEGIN
WHILE sayi <= 10
LOOP
sayi := sayi + 1;
DBMS_OUTPUT.PUT_LINE(‘Sayının değeri ‘ || sayi);
END LOOP;
END;
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;
. . .
END LOOP;
Örnek verecek olursak;
BEGIN
FOR sayi IN 1..15
LOOP
dbms_output.put_line (sayi);
END LOOP;
END;
Bir sonraki PL/SQL yazımızda görüşmek üzere.
Yusuf Arslan
[email protected] adresinden bana ulaşabilirsiniz.
Latest posts by Yusuf Arslan (see all)
- Veri Ambarı & ODI Online Eğitim - Ara 18, 2015
- Katılımcı Yorumları - Eki 27, 2015
- Veri Ambarı & İş Zekası ,SQL ,Veri Tabanı Eğitimleri -Kasım Programı - Eki 22, 2015