Menggunakan Ekspresi Bersyarat

Fungsi Umum

Fungsi umum digunakan untuk menangani nilai NULL dalam database. Tujuan dari fungsi penanganan NULL secara umum adalah untuk mengganti nilai NULL dengan nilai alternatif. Kami akan secara singkat melihat melalui fungsi-fungsi di bawah ini.

NVL

Fungsi NVL menggantikan nilai alternatif untuk nilai NULL.

Sintaksis:

NVL( Arg1, replace_with )

Dalam sintaks, kedua parameter tersebut bersifat wajib. Perhatikan bahwa fungsi NVL berfungsi dengan semua jenis tipe data. Dan juga bahwa tipe data dari string asli dan penggantinya harus dalam keadaan yang kompatibel yaitu sama atau secara implisit dapat diubah oleh Oracle.

Jika arg1 adalah nilai karakter, maka oracle mengonversi string pengganti ke tipe data yang kompatibel dengan arg1 sebelum membandingkannya dan mengembalikan VARCHAR2 dalam kumpulan karakter expr1. Jika arg1 adalah numerik, maka Oracle menentukan argumen dengan prioritas numerik tertinggi, secara implisit mengonversi argumen lain ke tipe data tersebut, dan mengembalikan tipe data tersebut.

Pernyataan SELECT di bawah ini akan menampilkan 'n / a' jika seorang karyawan belum ditugaskan ke pekerjaan apa pun, yaitu JOB_ID adalah NULL. Jika tidak, ini akan menampilkan nilai JOB_ID yang sebenarnya.

SELECT  first_name, NVL(JOB_ID, 'n/a')
FROM employees;

NVL2

Sebagai peningkatan dari NVL, Oracle memperkenalkan fungsi untuk menggantikan nilai tidak hanya untuk nilai kolom NULL tetapi juga untuk kolom NOT NULL. Fungsi NVL2 dapat digunakan untuk menggantikan nilai alternatif NULL serta nilai non NULL.

Sintaksis:

NVL2( string1, value_if_NOT_null, value_if_null )

Pernyataan SELECT di bawah ini akan menampilkan 'Bench' jika JOB_CODE untuk karyawan adalah NULL. Untuk nilai JOB CODE yang pasti bukan null, itu akan menunjukkan nilai konstan 'Job Assigned'.

SQL> SELECT NVL2(JOB_CODE, 'Job Assigned', 'Bench')
FROM employees;

NULLIF

Fungsi NULLIF membandingkan dua argumen expr1 dan expr2. Jika expr1 dan expr2 sama, ia mengembalikan NULL; lain, itu mengembalikan expr1. Tidak seperti fungsi penanganan null lainnya, argumen pertama tidak boleh NULL.

Sintaksis:

NULLIF (expr1, expr2)

Perhatikan bahwa argumen pertama bisa berupa ekspresi yang mengevaluasi ke NULL, tetapi tidak bisa berupa NULL literal. Kedua parameter tersebut wajib untuk menjalankan fungsi.

Kueri di bawah ini mengembalikan NULL karena kedua nilai input, 12 sama.

SELECT	NULLIF (12, 12)
FROM DUAL;

Demikian pula, kueri di bawah ini mengembalikan 'SUN' karena kedua string tersebut tidak sama.

SELECT NULLIF ('SUN', 'MOON')
FROM DUAL;

BERSATU

Fungsi COALESCE, bentuk NVL yang lebih umum, mengembalikan ekspresi non-null pertama dalam daftar argumen. Dibutuhkan minimal dua parameter wajib tetapi argumen maksimum tidak memiliki batas.

Sintaksis:

COALESCE (expr1, expr2, ... expr_n )

Pertimbangkan kueri SELECT di bawah ini. Ini memilih nilai nol pertama yang dimasukkan ke dalam bidang alamat untuk seorang karyawan.

SELECT COALESCE (address1, address2, address3) Address
FROM  employees;

Menariknya, fungsi COALESCE mirip dengan konstruk IF..ELSIF..ENDIF. Kueri di atas dapat ditulis ulang sebagai -

IF address1 is not null THEN
   result := address1;
ELSIF address2 is not null THEN
   result := address2;
ELSIF address3 is not null THEN
   result := address3;
ELSE
   result := null;
END IF;

Fungsi Bersyarat

Oracle menyediakan fungsi bersyarat DECODE dan CASE untuk memaksakan kondisi bahkan dalam pernyataan SQL.

Fungsi DECODE

Fungsinya adalah persamaan SQL dari pernyataan prosedural bersyarat IF..THEN..ELSE. DECODE bekerja dengan nilai / kolom / ekspresi dari semua tipe data.

Sintaksis:

DECODE (expression, search, result [, search, result]... [, default])

Fungsi DECODE membandingkan ekspresi terhadap setiap nilai pencarian secara berurutan. Jika persamaan ada antara ekspresi dan argumen pencarian, maka itu mengembalikan hasil yang sesuai. Jika tidak ada kecocokan, nilai default dikembalikan, jika ditentukan, NULL. Jika ada ketidakcocokan jenis kompatibilitas, oracle secara internal melakukan kemungkinan konversi implisit untuk mengembalikan hasil.

Faktanya, Oracle menganggap dua null setara saat bekerja dengan fungsi DECODE.

SELECT DECODE(NULL,NULL,'EQUAL','NOT EQUAL') 
FROM DUAL;

DECOD
-----
EQUAL

Jika ekspresi null, maka Oracle mengembalikan hasil pencarian pertama yang juga null. Jumlah maksimal komponen dalam fungsi DECODE adalah 255.

SELECT	first_name, salary, DECODE (hire_date, sysdate,'NEW JOINEE','EMPLOYEE')
	FROM employees;

Ekspresi CASE

Ekspresi CASE bekerja pada konsep yang sama seperti DECODE tetapi berbeda dalam sintaks dan penggunaan.

Sintaksis:

CASE  [ expression ]
   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n
   ELSE result
END

Pencarian Oracle dimulai dari kiri dan bergerak ke kanan hingga menemukan kondisi sebenarnya, dan kemudian mengembalikan ekspresi hasil yang terkait dengannya. Jika tidak ada kondisi yang ditemukan benar, dan klausa ELSE ada, maka Oracle mengembalikan hasil yang ditentukan dengan else. Jika tidak, Oracle mengembalikan null.

Jumlah maksimum argumen dalam ekspresi CASE adalah 255. Semua ekspresi dihitung dalam batas ini, termasuk ekspresi awal dari ekspresi CASE sederhana dan ekspresi ELSE opsional. Setiap WHEN ... THEN pasangan dihitung sebagai dua argumen. Untuk menghindari melebihi batas ini, Anda bisa melapiskan ekspresi CASE sehingga return_expr itu sendiri adalah ekspresi CASE.

SELECT first_name, CASE	WHEN salary < 200 THEN 'GRADE 1'
			WHEN salary > 200 AND salary < 5000 THEN 'GRADE 2'
			ELSE 'GRADE 3'
		   END CASE
FROM employees;	

ENAM    CASE
----    -------
JOHN    GRADE 2
EDWIN   GRADE 3
KING    GRADE 1