Home / MAKALELER / Veri Tabanı / PL/SQL Yazı Dizisi-3

PL/SQL Yazı Dizisi-3

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 THEN

statements;] [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.

plsql

 

plsql1

 

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

plsql2

plsql3

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(‘&notum’);

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ü

plsql4

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ü ;

plsql4

 

plsql6

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;

plsql7

plsql8

Bir sonraki PL/SQL yazımızda görüşmek üzere.

 

 

 

About Yusuf Arslan

Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerine Datawarehouse-Database Uzmanı olarak devam etmektedir Sitenin kurucusu ve yazarıdır. yusufarslanbm@gmail.com adresinden bana ulaşabilirsiniz.

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın