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