Oracle PL/SQL IF THEN ELSE İfadesi: ELSIF, NESTED-IF
Karar Verme İfadeleri Nelerdir?
Karar verme beyanları, akış kontrolüne karar verecek olanlardır. SQL şartlara göre açıklamalar yapılıyor. Programcıya, belirli bir kodun yürütülmesini önleme (şema 1) veya duruma göre istenilen kodu seçme (şema 2) konusunda daha iyi bir kontrol sağlar. Aşağıda “Karar Alma Beyanı”nın resimli anlatımı yer almaktadır.

Karar Verme İfadelerinin Türleri:
Oracle Aşağıdaki karar alma ifadelerini sağlar.
- Eğer-ise
- IF-THEN-ELSE
- IF-THEN-ELSIF
- İÇİÇE-EĞER
- OLGU
- ARADIĞI VAKA
IF-THEN Bildirimi
IF-THEN ifadesi esas olarak belirli bir kod bölümünü yalnızca koşul karşılandığında yürütmek için kullanılır.
Durum sonuç vermeli Boole (Doğru yanlış). ORACLE'ın önceden tanımlanmış koşullara göre belirli bir kod parçasını yürütmesine/atlamasına olanak tanıyan temel bir koşullu ifadedir.
IF THEN İfadeleri için sözdizimi:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END if;
- Yukarıdaki sözdiziminde, 'EĞER' anahtar kelimesinin ardından 'DOĞRU'/'YANLIŞ' olarak değerlendirilen bir koşul gelecektir.
- Kontrol şu işlemi gerçekleştirecektir: yalnızca koşul geri dönerse .
- Durumun değerlendirilmesi durumunda daha sonra SQL atlayacak ve 'END IF' bloğunun yanındaki kodu çalıştırmaya başlayacaktır.
Not: Koşul 'NULL' olarak değerlendirildiğinde, SQL 'NULL'u 'FALSE' olarak değerlendirecektir.
Örnek 1: Bu örnekte, sayı 100'den büyük olduğunda bir mesaj yazdıracağız. Bunun için aşağıdaki kodu çalıştıracağız
Bir sayının değeri 100'den büyük olduğunda bir mesaj yazdırmak için aşağıdaki kodu çalıştırırız.
DECLARE a NUMBER :=10; BEGIN dbms_output.put_line(‘Program started.' ); IF( a > 100 ) THEN dbms_output.put_line('a is greater than 100'); END IF; dbms_output.put_line(‘Program completed.'); END; /
Kod Açıklaması:
- Kod satırı 2: 'a' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '10' değeriyle başlatılması.
- Kod satırı 4: “Program başladı” ifadesinin yazdırılması.
- Kod satırı 5: 'a' değişkeninin '100'den büyük olup olmadığı koşulu kontrol ediliyor.
- Kod satırı 6: 'a', '100'den büyükse, o zaman “a, 100'den büyüktür” yazdırılacaktır. 'a' 100'den küçük veya ona eşitse koşul başarısız olur, dolayısıyla yukarıdaki yazdırma ifadesi göz ardı edilir.
- Kod satırı 8: “Program tamamlandı” ifadesinin yazdırılması.
Kod Çıkışı:
Program started. Program completed.
Örnek 2: Bu örnekte, belirli bir alfabe İngilizce sesli harflerde (A, E, I, O, U) mevcutsa bir mesaj yazdıracağız.
Verilen karakterin Vowel olması durumunda bir mesaj yazdırmak için aşağıdaki kodu çalıştırırız.
DECLARE a CHAR(1) :=’u’; BEGIN IF UPPER(a) in ('A’,'E','I','0','U' ) THEN dbms_output.put_line(‘The character is in English Vowels'); END IF; END; /
Kod Açıklaması:
- Kod satırı 2: 'a' değişkenini '1' boyutunda veri tipinin 'CHAR' olarak bildirmek ve onu 'u' değeriyle başlatmak.
- Kod satırı 4: 'a' değişkeninin listede bulunup bulunmadığının kontrol edilmesi ('A','E','I','O','U').
- Karşılaştırmanın büyük/küçük harfe duyarlı olmaması için karşılaştırmadan önce 'a'nın değeri büyük harfe dönüştürülmüştür.
- Kod satırı 5: Listede 'a' mevcutsa, “Karakter İngilizce Sesli Harflerdedir” ifadesi yazdırılacaktır. Koşul başarısız olursa, IF-THEN bloğunun dışında herhangi bir yazdırma ifadesi yayınlamadığımız için bu program herhangi bir çıktı vermeyecektir.
Kod Çıkışı:
The character is in English Vowels
IF-THEN-ELSE Bildirimi
- IF-THEN-ELSE ifadesi esas olarak duruma bağlı olarak iki alternatif arasında seçim yapmak için kullanılır.
- Aşağıda IF-THEN-ELSE ifadesinin söz dizimi gösterimi bulunmaktadır.
IF-THEN-ELSE İfadelerinin Sözdizimi:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_blockl> ELSE -execute if the condition failed (returns FALSE) <action_block2> END if;
- Yukarıdaki sözdiziminde, 'EĞER' anahtar kelimesinin ardından 'DOĞRU'/'YANLIŞ' olarak değerlendirilen bir koşul gelecektir.
- Kontrol şu işlemi gerçekleştirecektir: yalnızca koşul geri dönerse .
- Durumun değerlendirilmesi durumunda daha sonra SQL yürütülecek .
- Her durumda, iki eylem bloğundan biri yürütülecektir.
Not: Koşul 'NULL' olarak değerlendirildiğinde, SQL 'NULL'u 'FALSE' olarak değerlendirecektir.
Örnek 1: Bu örnekte verilen sayı tek mi çift mi mesajını yazdıracağız.
DECLARE a NUMBER:=11; BEGIN dbms_output.put_line (‘Program started'); IF( mod(a,2)=0) THEN dbms_output.put_line('a is even number' ); ELSE dbms_output.put_line('a is odd number1); END IF; dbms_output.put_line (‘Program completed.’); END; /
Kod Açıklaması:
- Kod satırı 2: 'a' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '11' değeriyle başlatılması.
- Kod satırı 4: “Program başladı” ifadesinin yazdırılması.
- Kod satırı 5: 'a' değişkeninin '2'ye göre modülünün 0 olup olmadığı koşulunun kontrol edilmesi.
- Kod satırı 6: '0' ise “a çift sayıdır” yazdırılacaktır.
- Kod satırı 7: Modül değeri '0'a eşit değilse koşul geri döner , yani “a tek sayıdır” mesajı yazdırılacaktır.
- Kod satırı 10: “Program tamamlandı” ifadesinin yazdırılması
Kod Çıkışı:
Program started. a is odd number Program completed.
IF-THEN-ELSIF Bildirimi
- IF-THEN-ELSIF ifadesi esas olarak, her alternatifin yerine getirilmesi gereken kendi koşullarının olduğu bir dizi alternatif arasından bir alternatifin seçilmesi gerektiği durumlarda kullanılır.
- Geri dönen ilk koşullar yürütülecek ve kalan koşullar atlanacak.
- IF-THEN-ELSIF deyimi içinde 'ELSE' bloğu bulunabilir. Bu 'ELSE' bloğu, koşullardan hiçbiri karşılanmazsa yürütülecektir.
not: Bu koşullu ifadede ELSE bloğu isteğe bağlıdır. ELSE bloğu yoksa ve koşulların hiçbiri karşılanmazsa, denetleyici tüm eylem bloğunu atlayacak ve kodun geri kalan kısmını çalıştırmaya başlayacaktır.
IF-THEN-ELSIF İfadelerinin Sözdizimi:
IF <conditionl: returns Boolean> THEN -executed only if the condition returns TRUE < action_blockl> ELSIF <condition2 returns Boolean> < action_block2> ELSIF <condition3:returns Boolean> < action_block3> ELSE —optional <action_block_else> END if;
- Yukarıdaki sözdiziminde, kontrol aşağıdakileri yürütecektir: yalnızca koşul1 geri dönerse .
- Koşul 1 karşılanmazsa, kontrolör koşul 2'yi kontrol edecektir.
- Denetleyici, aşağıdaki iki durumda IF ifadesinden çıkacaktır.
- Denetleyici geri dönen herhangi bir koşul bulduğunda . Bu durumda karşılık gelen action_block yürütülecek ve denetleyici bu IF-deyim bloğundan çıkacak ve kalan kodu yürütmeye başlayacaktır.
- Koşulların hiçbiri karşılanmadığında, kontrolör eğer mevcutsa ELSE bloğunu yürütecek ve ardından IF ifadesinden çıkacaktır.
Not: Koşul 'NULL' olarak değerlendirildiğinde, SQL 'NULL'u 'FALSE' olarak değerlendirecektir.
Örnek 1: ELSE bloğu olmadan
Bu örnekte, else koşulu olmaksızın verilen notlara göre notu yazdıracağız (işaretle >= 70 Not A, işaretle >=40 ve işaretle<70 İşaretle B Not, işaretle >=35 ve işaretle<40 Not C).
DECLARE mark NUMBER :=55; BEGIN dbms_output.put_line(‘Program started.’ ); IF( mark >= 70) THEN dbms_output.put_line(‘Grade A’); ELSIF(mark >= 40 AND mark < 70) THEN dbms_output.put_line(‘Grade B'); ELSIF(mark >=35 AND mark < 40) THEN dbms_output.put_line(‘Grade C’); END IF; dbms_output.put_line(‘Program completed.’); END; /
Kod Açıklaması:
- Kod satırı 2: 'mark' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '55' değeriyle başlatılması.
- Kod satırı 4: “Program başladı” ifadesinin yazdırılması.
- Kod satırı 5: Koşul1'in kontrol edilmesi, 'işaretin' 70'ten büyük veya eşit olması.
- Kod satırı 7: Koşul1 başarısız olduğundan koşul2 '70>işaret>=40′ kontrol edilir.
- Kod satırı 8: Koşul2 şunu döndürür: dolayısıyla 'B Sınıfı' mesajı yazdırılacaktır.
- Kod satırı12: “Program tamamlandı” ifadesinin yazdırılması.
- Bu durumda, denetleyici geri dönen bir koşul bulduğu için koşul3 'işareti < 35' atlanacaktır. koşuldan önce3.
Kod Çıkışı:
Program started. Grade B Program completed.
Örnek 2: ELSE bloğu ile
Bu örnekte, else koşuluyla verilen notlara göre notu yazdıracağız (işaretle >= 70 Not A, işaretle >=40 ve işaretle<70 İşaretle B Not, işaretle >=35 ve işaretle<40 Not C, aksi takdirde) 'Not Yok').
DECLARE mark NUMBER :=25; BEGIN dbms_output.put_line(‘Program started.’ ); IF( mark >= 70) THEN dbms_output.put_line(‘Grade A’); ELSIF(mark >= 40 AND mark < 70) THEN dbms_output.put_line(‘Grade B'); ELSIF(mark >=35 AND mark < 40) THEN dbms_output.put_line(‘Grade C); ELSE dbms_output.put_line(‘No Grade’); END IF; dbms_output.put_line(‘Program completed.' ); END; /
Kod Açıklaması:
- Kod satırı 2: 'mark' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '25' değeriyle başlatılması.
- Kod satırı 4: “Program başladı” ifadesinin yazdırılması.
- Kod satırı 5: Koşul 1'in kontrol edilmesi, 'işaretin' 70'ten büyük veya eşit olması.
- Kod satırı 7: Koşul1 başarısız olduğundan koşul2 '70>işaret>=40′ kontrol edilir.
- Kod satırı 8: Koşul2 başarısız olduğundan koşul3 '40>işaret>=35′ kontrol edilir.
- Kod satırı 11: Tüm koşullar başarısız olduğundan, kontrol şimdi ELSE bloğunun varlığını kontrol edecek ve ELSE bloğundan 'Not Yok' mesajını yazdıracaktır.
- Kod satırı14: “Program tamamlandı” ifadesinin yazdırılması.
Kod Çıkışı:
Program started. No Grade Program completed.
NESTED-IF Bildirimi
- NESTED-IF ifadesi temel olarak programcıların bir veya daha fazla 'IF' koşulunu başka bir 'IF' koşulunun içine yerleştirmesine izin verir. normal ifadelerin dışında.
- Her bir 'IF' koşulu, söz konusu spesifik kapsamın sonunu belirten ayrı bir 'END IF' ifadesine sahip olmalıdır. .
- 'EĞER' ifadesi, o belirli koşul için en yakın 'SON IF' ifadesini bir uç nokta olarak kabul edecektir.
- NESTED-IF'nin resimli gösterimi aşağıdaki şemada gösterilmiştir.
IF <conditionl: returns Boolean> THEN —executed only if the condition returns TRUE <action block1 starts> IF <condition2: returns Boolean> THEN <action_block2> END IF; —END IF corresponds to condition2 <action_blockl ends> END IF; —END IF corresponds to condition1
Sözdizimi Açıklaması:
- Yukarıdaki sözdiziminde dış IF, eylem bloğunda bir IF ifadesi daha içerir.
- Koşul1 geri döner , ardından kontrol yürütülecek ve durumu1 kontrol eder.
- Koşul2 de geri dönerse , Daha sonra da idam edilecek.
- Koşul2 durumunda şu şekilde değerlendirilir: daha sonra SQL atlayacak .
Burada Nested If örneğini göreceğiz –
Nested-If İfadesi Örneği: Üç sayının en büyüğü
Bu örnekte Nested-If ifadesini kullanarak üç sayının en büyüğünü yazdıracağız. Bildirme kısmında aşağıdaki kodda göreceğiniz gibi sayılar atanacak yani Number= 10,15 ve 20 ve iç içe if ifadeleri kullanılarak maksimum sayı getirilecek.
DECLARE a NUMBER :=10; b NUMBER :=15; c NUMBER :=20; BEGIN dbms_output.put_line(‘Program started.' ); IF( a > b)THEN /*Nested-if l */ dbms_output.put_line(’Checking Nested-IF 1'); IF( a > c ) THEN dbms_output.put_line(‘A is greatest’); ELSE dbms_output.put_line(‘C is greatest’); END IF; ELSE /*Nested-if2 */ dbms_output.put_line('Checking Nested-IF 2' ); IF( b > c ) THEN dbms_output.put_line(’B is greatest' ); ELSE dbms_output.put_line(’C is greatest' ); END IF; END IF; dbms_output.put_line(‘Program completed.’ ); END; /
Kod Açıklaması:
- Kod satırı 2: 'a' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '10' değeriyle başlatılması.
- Kod satırı 3: 'b' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '15' değeriyle başlatılması.
- Kod satırı 4: 'c' değişkeninin 'NUMBER' veri türü olarak bildirilmesi ve '20' değeriyle başlatılması.
- Kod satırı 6: “Program başladı” ifadesinin yazdırılması (satır 6).
- Kod satırı 7: Koşul1'in kontrol edilmesi, 'a'nın 'b'den büyük olup olmadığı (satır 7).
- Kod satırı 10: Eğer 'a', 'b'den büyükse, 'nested-if 1' koşulu, 'a'nın 'c'den büyük olup olmadığını kontrol edecektir (satır 10).
- Kod satırı 13: Eğer 'a' hala büyükse, 'A en büyüktür' mesajı yazdırılacaktır (satır 11). Aksi halde koşul2 başarısız olursa 'C en büyüktür' yazdırılacaktır (satır 13).
- Kod satırı 18: Koşul1'in yanlış döndürmesi durumunda, 'nested-if 2'deki koşul 'b'nin 'c'den büyük olup olmadığını kontrol edecektir (satır 18).
- Kod satırı 21: 'b', 'c'den büyükse, 'B en büyüktür' mesajı yazdırılacaktır (satır 19), aksi halde koşul2 başarısız olursa, 'C en büyüktür' yazdırılacaktır (satır 21).
- Kod satırı 24: “Program tamamlandı” ifadesinin yazdırılması (satır 24).
Kodun çıktısı:
Program started. Checking Nested-IF 2 C is greatest Program completed.
ÖZET
Bu bölümde farklı karar verme ifadelerini, bunların sözdizimini ve örneklerini öğrendik. Aşağıdaki tabloda tartıştığımız çeşitli koşullu ifadelerin özeti verilmektedir.
TİP | AÇIKLAMA | KULLANIM |
---|---|---|
Eğer-ise | 'THEN' bloğundaki TRUE kodunun yürütülüp yürütülmeyeceğini kontrol eder. | Koşula bağlı olarak belirli bir kodu atlamak/yürütmek için. |
IF-THEN-ELSE | 'THEN' bloğundaki DOĞRU kodun yürütülüp yürütülmeyeceğini, 'ELSE' bloğundaki yanlış kodun yürütülüp yürütülmeyeceğini kontrol eder. | 'BU-VEYA-BU' durumunda en uygunudur. |
IF-THEN-ELSIF | Boole koşulunu sıralı olarak kontrol eder. Dizideki TRUE koşulunu döndüren ilk blok yürütülecektir. Eğer dizideki koşullardan hiçbiri DOĞRU değilse 'ELSE' bloğundaki kod çalıştırılır. | Çoğunlukla ikiden fazla alternatif arasından seçim yapmak için kullanılır. |
İÇİÇE-EĞER | Başka bir IF-THEN veya IF-THEN-ELSIF ifadesinin içinde bir veya daha fazla IF-THEN veya IF-THEN-ELSIF ifadesine izin verir. | Esas olarak iç içe geçmiş durumda kullanılır. |