Oracle Pernyataan PL/SQL IF THEN ELSE: ELSIF, NESTED-IF

Apa itu Pernyataan Pengambilan Keputusan?

Pernyataan pengambilan keputusan adalah mereka yang akan memutuskan pengendalian aliran SQL pernyataan berdasarkan kondisi. Ini memberi programmer kontrol yang lebih baik untuk mencegah eksekusi kode tertentu (diagram 1) atau memilih kode yang diinginkan berdasarkan kondisi (diagram 2). Di bawah ini adalah representasi bergambar dari “Pernyataan Pengambilan Keputusan”.

Diagram Pernyataan Pengambilan Keputusan
Diagram Pernyataan Pengambilan Keputusan

Jenis Pernyataan Pengambilan Keputusan:

Oracle menyediakan jenis pernyataan pengambilan keputusan berikut.

  • JIKA KEMUDIAN
  • JIKA-MAKA-LAIN
  • JIKA-MAKA-ELSIF
  • BERSARANG-JIKA
  • KASUS
  • KASUS YANG DICARI

Pernyataan JIKA-MAKA

Pernyataan IF-THEN terutama digunakan untuk mengeksekusi bagian kode tertentu hanya jika kondisinya terpenuhi.

Kondisinya harus menyerah Boolean (Benar/Salah). Ini adalah pernyataan kondisional dasar yang akan memungkinkan ORACLE untuk mengeksekusi/melewati bagian kode tertentu berdasarkan kondisi yang telah ditetapkan sebelumnya.

Sintaks Pernyataan IF THEN:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • Dalam sintaks di atas, kata kunci 'IF' akan diikuti dengan kondisi yang bernilai 'TRUE'/'FALSE'.
  • Kontrol akan mengeksekusi hanya jika kondisinya kembali .
  • Dalam hal kondisi dievaluasi menjadi kemudian, SQL akan melewatkan , dan itu akan mulai mengeksekusi kode di sebelah blok 'END IF'.

Catatan: Setiap kali kondisi dievaluasi menjadi 'NULL', maka SQL akan memperlakukan 'NULL' sebagai 'FALSE'.

Contoh 1:Dalam contoh ini, kita akan mencetak pesan ketika angkanya lebih besar dari 100. Untuk itu, kita akan menjalankan kode berikut

Untuk mencetak pesan ketika suatu angka memiliki nilai lebih dari 100, kita jalankan kode berikut.

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

Penjelasan Kode:

  • Baris kode 2: Mendeklarasikan variabel 'a' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '10'.
  • Baris kode 4: Mencetak pernyataan “Program dimulai”.
  • Baris kode 5: Mengecek kondisi apakah variabel 'a' lebih besar dari '100'.
  • Baris kode 6: Jika 'a' lebih besar dari '100', maka “a lebih besar dari 100” akan dicetak. Jika 'a' lebih kecil atau sama dengan 100, maka kondisi gagal, sehingga pernyataan pencetakan di atas diabaikan.
  • Baris kode 8: Mencetak pernyataan “Program selesai”.

Keluaran Kode:

Program started.
Program completed.

Contoh 2: Dalam contoh ini, kita akan mencetak pesan jika alfabet tertentu ada dalam vokal bahasa Inggris (A, E, I, O, U).

Untuk mencetak pesan ketika karakter yang diberikan adalah Vokal, kita jalankan kode berikut.

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

Penjelasan Kode:

  • Baris kode 2: Mendeklarasikan variabel 'a' sebagai tipe data 'CHAR' dengan ukuran '1' dan menginisialisasinya dengan nilai 'u'.
  • Baris kode 4: Memeriksa kondisi apakah variabel 'a' ada dalam daftar ('A','E','I','O','U').
  • Nilai 'a' telah diubah menjadi huruf besar sebelum dibandingkan agar perbandingan tidak peka huruf besar-kecil.
  • Baris kode 5: Jika 'a' ada dalam daftar, maka pernyataan “Karakter dalam Vokal Bahasa Inggris” akan dicetak. Jika kondisi gagal, maka program ini tidak akan mengeluarkan output apa pun, karena di luar blok IF-THEN kita belum mengeluarkan pernyataan pencetakan apa pun.

Keluaran Kode:

The character is in English Vowels

Pernyataan IF-THEN-ELSE

  • Pernyataan IF-THEN-ELSE terutama digunakan untuk memilih antara dua alternatif berdasarkan kondisi.
  • Di bawah ini adalah representasi sintaksis dari pernyataan IF-THEN-ELSE.

Sintaks Pernyataan IF-THEN-ELSE:

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;
  • Dalam sintaks di atas, kata kunci 'IF' akan diikuti dengan kondisi yang bernilai 'TRUE'/'FALSE'.
  • Kontrol akan mengeksekusi hanya jika kondisinya kembali .
  • Jika kondisi dievaluasi menjadi kemudian, SQL akan mengeksekusi .
  • Bagaimanapun, salah satu dari dua blok tindakan akan dieksekusi.

Catatan: Setiap kali kondisi bernilai 'NULL', maka SQL akan memperlakukan 'NULL' sebagai 'FALSE'.

Contoh 1: Dalam contoh ini, kita akan mencetak pesan apakah bilangan yang diberikan ganjil atau genap.

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

Penjelasan Kode:

  • Baris kode 2: Mendeklarasikan variabel 'a' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '11'.
  • Baris kode 4: Mencetak pernyataan “Program dimulai”.
  • Baris kode 5: Memeriksa kondisi apakah modulus variabel 'a' dengan '2' adalah 0.
  • Baris kode 6: Jika '0', maka akan dicetak “a bilangan genap”.
  • Baris kode 7: Jika nilai modulus tidak sama dengan '0', maka kondisi akan kembali , sehingga akan tercetak pesan “a bilangan ganjil”.
  • Baris kode10: Mencetak pernyataan “Program selesai”

Keluaran Kode:

Program started.
a is odd number
Program completed.

Pernyataan IF-THEN-ELSIF

  • Pernyataan IF-THEN-ELSIF terutama digunakan ketika satu alternatif harus dipilih dari serangkaian alternatif, dimana setiap alternatif memiliki kondisinya sendiri yang harus dipenuhi.
  • Kondisi pertama yang kembali akan dieksekusi, dan kondisi lainnya akan dilewati.
  • Pernyataan IF-THEN-ELSIF mungkin berisi blok 'ELSE' di dalamnya. Blok 'ELSE' ini akan dieksekusi jika tidak ada satupun kondisi yang terpenuhi.

Note: Blok ELSE bersifat opsional dalam pernyataan kondisional ini. Jika tidak ada blok ELSE, dan tidak ada kondisi yang terpenuhi, maka pengontrol akan melewati semua blok tindakan dan mulai mengeksekusi sisa kode.

Sintaks Pernyataan IF-THEN-ELSIF:

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;
  • Dalam sintaks di atas, kontrol akan mengeksekusi hanya jika kondisi1 kembali .
  • Jika kondisi1 tidak terpenuhi, maka pengontrol akan memeriksa kondisi2.
  • Pengendali akan keluar dari pernyataan IF dalam dua kasus berikut.
    • Ketika pengontrol menemukan kondisi apa pun yang kembali . Dalam hal ini, action_block yang sesuai akan dieksekusi dan pengontrol akan keluar dari blok pernyataan IF ini dan mulai mengeksekusi kode yang tersisa.
    • Jika tidak ada kondisi yang terpenuhi, maka pengontrol akan mengeksekusi blok ELSE jika ada, kemudian akan keluar dari pernyataan IF.

Catatan: Setiap kali kondisi bernilai 'NULL', maka SQL akan memperlakukan 'NULL' sebagai 'FALSE'.

Contoh 1: Tanpa blok ELSE

Dalam contoh ini, kita akan mencetak nilai berdasarkan nilai yang diberikan tanpa syarat lain (nilai >= 70 Nilai A, nilai >=40 dan nilai<70 Nilai B, nilai >=35 dan nilai<40 Nilai 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;
/

Penjelasan Kode:

  • Baris kode 2: Mendeklarasikan variabel 'tandai' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '55'.
  • Baris kode 4: Mencetak pernyataan “Program dimulai”.
  • Baris kode 5: Memeriksa kondisi1, apakah 'tanda' lebih besar atau sama dengan 70.
  • Baris kode 7: Karena kondisi1 gagal, maka kondisi2 '70>tanda>=40′ dicentang.
  • Baris kode 8: Kondisi2 kembali , maka pesan 'Grade B' akan dicetak.
  • Kode baris12: Mencetak pernyataan “Program selesai”.
  • Dalam hal ini, kondisi3 'tanda < 35' akan dilewati, karena pengontrol menemukan satu kondisi yang kembali sebelum kondisi3.

Keluaran Kode:

Program started.
Grade B
Program completed.

Contoh 2: Dengan blok ELSE

Dalam contoh ini, kita akan mencetak nilai berdasarkan nilai yang diberikan dengan kondisi lain (nilai >= 70 Nilai A, nilai >=40 dan nilai<70 Nilai B, nilai >=35 dan nilai<40 Nilai C, else 'Tidak Ada Nilai').

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

Penjelasan Kode:

  • Baris kode 2: Mendeklarasikan variabel 'tandai' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '25'.
  • Baris kode 4: Mencetak pernyataan “Program dimulai”.
  • Baris kode 5: Memeriksa kondisi 1, apakah 'tanda' lebih besar atau sama dengan 70.
  • Baris kode 7: Karena kondisi1 gagal, maka kondisi2 '70>tanda>=40′ dicentang.
  • Baris kode 8: Karena kondisi2 gagal, maka kondisi3 '40>tanda>=35′ dicentang.
  • Baris kode 11: Karena semua kondisi gagal, kontrol sekarang akan memeriksa keberadaan blok ELSE, dan akan mencetak pesan 'Tidak Ada Nilai' dari blok ELSE.
  • Kode baris14: Mencetak pernyataan “Program selesai”.

Keluaran Kode:

Program started.
No Grade 
Program completed.

Pernyataan NESTED-IF

  • Pernyataan NESTED-IF pada dasarnya memungkinkan pemrogram untuk menempatkan satu atau lebih kondisi 'IF' di dalam kondisi 'IF' lainnya. selain pernyataan normal.
  • Setiap kondisi 'IF' harus memiliki pernyataan 'END IF' terpisah yang menandai akhir cakupan kondisi tersebut .
  • Pernyataan 'IF' akan mempertimbangkan pernyataan 'END IF' terdekat sebagai titik akhir untuk kondisi tertentu.
  • Representasi gambar untuk NESTED-IF ditunjukkan pada diagram di bawah ini.

Pernyataan NESTED-IF

Pernyataan NESTED-IF

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

Penjelasan Sintaks:

  • Dalam sintaks di atas, IF bagian luar berisi satu pernyataan IF lagi di blok tindakannya.
  • Kondisi1 kembali , maka kontrol akan dijalankan dan memeriksa kondisi1.
  • Jika kondisi2 juga kembali , Kemudian juga akan dieksekusi.
  • Jika kondisi2 dievaluasi menjadi kemudian, SQL akan melewatkan .

Di sini kita akan melihat contoh Nested If –

Contoh Pernyataan Nested-If: Bilangan terbesar dari tiga

Dalam contoh ini, kita akan mencetak bilangan terbesar dari tiga bilangan dengan menggunakan pernyataan Nested-If. Nomor akan ditetapkan di bagian deklarasi, seperti yang Anda lihat pada kode di bawah ini, yaitu Nomor= 10,15 dan 20 dan nomor maksimum akan diambil menggunakan pernyataan nested-if.

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

Penjelasan Kode:

  • Baris kode 2: Mendeklarasikan variabel 'a' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '10'.
  • Baris kode 3: Mendeklarasikan variabel 'b' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '15'.
  • Baris kode 4: Mendeklarasikan variabel 'c' sebagai tipe data 'NUMBER' dan menginisialisasinya dengan nilai '20'.
  • Kode baris 6: Mencetak pernyataan “Program dimulai” (baris 6).
  • Kode baris 7: Memeriksa kondisi1, apakah 'a' lebih besar dari 'b' (baris 7).
  • Baris kode 10: Jika 'a' lebih besar dari 'b, maka kondisi di 'nested-if 1' akan memeriksa apakah 'a' lebih besar dari 'c' (baris 10).
  • Kode baris 13: Jika 'a' masih lebih besar, maka pesan 'A paling besar' akan dicetak (baris 11). Lain jika kondisi2 gagal, maka 'C terbesar' akan dicetak (baris 13).
  • Baris kode 18: Jika kondisi1 menghasilkan nilai salah, maka kondisi di 'nested-if 2' akan memeriksa apakah 'b' lebih besar dari 'c'(baris 18).
  • Baris kode 21: Jika 'b' lebih besar dari 'c' , maka pesan 'B adalah yang terbesar' yang akan dicetak (baris 19), sebaliknya jika kondisi2 gagal, maka 'C adalah yang terbesar' yang akan dicetak (baris 21).
  • Kode baris 24: Mencetak pernyataan “Program selesai” (baris 24).

Keluaran kode:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Kesimpulan

Dalam bab ini, kita telah mempelajari berbagai pernyataan pengambilan keputusan serta sintaksis dan contohnya. Tabel di bawah ini memberikan ringkasan berbagai pernyataan kondisional yang telah kita diskusikan.

JENIS DESKRIPSI PENGGUNAAN
JIKA KEMUDIAN Memeriksa kondisi Boolean, apakah kode TRUE di blok 'THEN' akan dieksekusi. Untuk melewati,/eksekusi kode tertentu berdasarkan kondisi.
JIKA-MAKA-LAIN Memeriksa kondisi Boolean, apakah kode TRUE di blok 'THEN' akan dieksekusi, jika kode salah di blok 'ELSE' dieksekusi. Paling tepat dalam kondisi 'INI-ATAU-ITU'.
JIKA-MAKA-ELSIF Memeriksa kondisi Boolean secara berurutan. Blok pertama dalam urutan yang mengembalikan kondisi TRUE akan dieksekusi. Jika tidak ada kondisi dalam urutan yang BENAR, maka kode di blok 'ELSE' akan dieksekusi. Biasanya memilih dari lebih dari dua alternatif.
BERSARANG-JIKA Mengizinkan satu atau lebih pernyataan IF-THEN atau IF-THEN-ELSIF di dalam pernyataan IF-THEN atau IF-THEN-ELSIF lainnya. Terutama digunakan dalam situasi kondisi bersarang.