PL/SQL Kontrol Yapıları

Akış Kontrol Yapıları

  • Koşullu yapı— Selection Structure
  • Koşulların TRUEveya FALSE olması durumuna göre talimatların çalıştırıldığı yapıdır.
  • Sonucu TRUE olan koşula ait talimatlar çalışıtırılır, FALSE olana ait talimatlar dikkate alınmaz.
  • Döngüsel yapı— Looping Structure

 

  • Talimatların tekrarlar halinde çalıştırıldığı yapılardır.
  1. Koşullu Yapı

Koşullu yapılarda koşul yazarken iki temel operatör grubu kullanılır:

  • İlişkisel Operatörler
  • Mantıksal Operatörler

İlişkisel ve Mantıksal Operatörler

  1. Koşullu Yapı

PL/SQL’de bulunan koşullu yapılar:

  • IF … THEN … END IF;

IF …. THEN yapısı, IF içinde belirtilen koşul sağlanırsa THEN … END IF arasındaki işlemler yapılmaktadır. Aksi takdirde işlemler yapılmadan bir sonraki işleme ya da komuta geçilmektedir.

IF (Condition) THEN
Komutlar
END IF;

IF deyimindeki koşulun sonucu TRUE ise, IF bloğunun içerisindeki ifadeler çalıştırılır.
IF deyimindeki koşulun sonucu FALSE ise, IF bloğunun içerisindeki ifadeler çalıştırılmaz ve program yapısında IF bloğundan sonra gelen ifade ile programın çalışması devam eder.

Örnek:

DECLARE
vDay VARCHAR2(10) := ‘&gun_ismi_gir’;
BEGIN
IF (LOWER(vDay) = ‘cumartesi’ OR LOWER(vDay) = ‘pazar’) THEN
DBMS_OUTPUT.PUT_LINE(‘Girilen gün hafta sonudur…’);
END IF;
END;

  • IF … THEN … ELSE … END IF;

IF — THEN — ELSE yapısında ise IF içinde belirtilen koşul sağlanırsa THEN-ELSE arasındaki komutlar çalıştırılır ya da işlemler yapılır. Koşul doğru değil ise ELSE — END IF arasındaki işlemler yapılmaktadır.

IF (Condition) THEN
Komutlar
ELSE
Komutlar
END IF;

IF deyimindeki koşulun sonucu TRUE ise, IF bloğunun içerisindeki ifadeler çalıştırılır.
IF deyimindeki koşulun sonucu FALSE ise, ELSE bloğunun içerisindeki ifadeler çalıştırılır.

Örnek:

DECLARE
vDay VARCHAR2(10) := ‘&gun_ismi_gir’;
BEGIN
IF (LOWER(vDay) = ‘cumartesi’ OR LOWER(vDay) = ‘pazar’) THEN
DBMS_OUTPUT.PUT_LINE(‘Girilen gün hafta sonu !’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Girilen gün hafta içi !’);
END IF;
END;

  • IF … THEN … ELSIF … END IF;

IF — THEN — ELSEIF yapısında ise birden çok alternatif bulunmaktadır. Burada koşullar yukarıdan aşağıya doğru bakılarak, koşulların sağlanması durumunda ilgili işlemler yapılmaktadır. Söz dizimi aşağıdaki gibidir.

IF (Condition) THEN
Komutlar
ELSEIF (Condition) THEN
Komutlar
ELSE
Komutlar
END IF;

Çok fazla alternatifin kontrol edildiği durumlarda kullanılır.
Koşulu TRUE olan ELSIF bloğundaki ifadeler çalıştırılır.
Tüm ELSIF koşulları FALSE ise, ELSE içerisindeki ifadeler çalıştırılır.

Örnek:

DECLARE
vDay VARCHAR2(10) := ‘&gun_ismi_gir’;
BEGIN
IF (LOWER(vDay) = ‘cumartesi’ OR LOWER(vDay) = ‘pazar’) THEN
DBMS_OUTPUT.PUT_LINE(‘Girilen gün hafta sonu !’);
ELSIF (LOWER(vDay) = ‘pazartesi’) THEN
DBMS_OUTPUT.PUT_LINE(‘Girilen gün hafta başı !’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Girilen gün hafta içi !’);
END IF;
END;

  • CASE … END CASE;

CASE yapısı, IF yapısına benzer fakat çok seçenek yani çok şart olduğunda kullanılması daha uygun bir yapıdır. Birden çok IF yazmak yerine bir CASE bloğu ile içinde uygun şarttaki işlemler yapılır ya da ELSE seçeneği ile işlem bitirilir.

CASE seçim
WHEN ifade A THEN işlem 1;
WHEN ifade B THEN işlem 2;
WHEN ifade C THEN işlem 3;
WHEN ifade D THEN işlem 4;
WHEN ifade E THEN işlem 5;

Örnek:

DECLARE
sayı NUMBER(5) := &sayı_gir;
kalan NUMBER(5);
BEGIN
kalan := MOD(sayı,2);
CASE kalan
WHEN 0 THEN DBMS_OUTPUT.PUT_LINE(sayı || ‘ ÇİFT sayıdır !’);
ELSE
DBMS_OUTPUT.PUT_LINE(sayı || ‘ TEK sayıdır !’);
END CASE;
END;

  1. Döngüsel Yapı

Döngü; belli işlemlerin belli şartlar altında bir çok kez (tekrar tekrar) yapılması işlemidir. Döngü, iterasyon demektir.
Tekrar tekrar yapılacak işlemleri tekrar tekrar yazmak yerine sadece bir kere yazmayı sağlar. PL/SQL’de üç tane döngü yapısı vardır:

  1. LOOP döngüsü
  2. WHILE döngüsü
  3. FOR döngüsü

Her döngü yapısının kendine özgü yazım kuralları ve çalışma biçimi vardır.

a. LOOP döngüsü

Döngü koşulu döngü yapısının sonunda WHEN ile verilir. Bu nedenle, döngü önce içerisindeki ifadeleri çalıştırır sonra koşulu kontrol eder.
Döngü en az bir defa çalışır. Döngüden çıkmayı sağlayan deyim WHEN ile birlikte kullanılan EXIT deyimidir.

LOOP
ifade(ler);
EXIT [WHEN koşul];
END LOOP;

Örnek:

DECLARE
sayı NUMBER(3) := &sayı_gir;
toplam NUMBER(5) := 0;
sayac NUMBER(3) := 1;
BEGIN
LOOP
toplam := toplam + sayac;
sayac := sayac + 1;
EXIT WHEN sayac > sayı;
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘1 ile ‘ || sayı || ‘ arasındaki sayıların toplamı = ‘ || toplam);
END;

b. WHILE döngüsü

Döngü koşulu TRUE olduğu sürece döngü çalışır. Koşul FALSE olduğunda döngü yapısından çıkılır.

WHILE koşul LOOP
ifade(ler);
END LOOP;

Örnek:

DECLARE
sayı NUMBER(3) := &sayı_gir;
toplam NUMBER(5) := 0;
ortalama NUMBER(3,2);
sayac NUMBER(3) := 1;
BEGIN
WHILE sayac <= sayı LOOP
toplam := toplam + sayac;
sayac := sayac + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘1 ile ‘ || sayı || ‘ arasındaki sayıların toplamı = ‘ || toplam);
ortalama := toplam / (sayac-1);
DBMS_OUTPUT.PUT_LINE(‘1 ile ‘ || sayı || ‘ arasındaki sayıların ortalaması = ‘ || ortalama);
END;

c. FOR döngüsü

Sayacın ilk değer ataması, koşul ve sayacın artımı/azalması döngünün FOR deyiminin yanında verilir.
Koşul TRUE olduğu sürece çalışan döngüdür.
Döngünün koşulu FALSE olduğu anda döngü yapısından çıkılır.
Döngünün sayacı sadece döngü içerisinde tanımlıdır.
Sayacın döngü yapısında aldığı değerler döngü dışına taşınmaz.

FOR sayac IN [REVERSE] alt_sınır..üst_sınır LOOP
ifade(ler);
END LOOP;

Örnek:

DECLARE
sayı NUMBER(3) := &sayı_gir;
toplam NUMBER(5) := 0;
ortalama NUMBER(3,2);
sayac NUMBER(3);
tane NUMBER(3) := 0;
BEGIN
FOR sayac IN 1..sayı LOOP
toplam := toplam + sayac;
tane := tane + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘1 ile ‘ || sayı || ‘ arasındaki sayıların toplamı = ‘ || toplam);
ortalama := toplam / tane;
DBMS_OUTPUT.PUT_LINE(‘1 ile ‘ || sayı || ‘ arasındaki sayıların ortalaması = ‘ || ortalama);
END;

 

Metin YENİDOĞAN

IT Solution Manager |Lecturer | Agile Performer | Solution Architect

Yorum ekle


Güvenlik kodu
Yenile

Metin Yenidoğan

Metin Yenidoğan

Bilişim teknolojileri Yöneticisi, Eğitmen

Yazarın Son 5 makalesi