ERROR HANDLING (EXCEPTION)
Setiap kesalahan (error) atau peringatan (warning) yang muncul karena suatu perintah disebut dengan exception. Bagian exception ini ditujukan untuk menangani exception tersebut. Bagian ini disebut juga exception handler, sedangkan mekanisme penanganan exception itu disebut exception handling. Jika tidak terdapat EXCEPTION dalam sebuah blok, maka semua proses akan terhenti dengan tanpa adanya penanganan kesalahan. Sebaliknya jika terdapat exception section, maka semua perintah berikutnya dalam bagian executable section tidak dieksekusi dan proses akan berpindah ke bagian exception handler.
Cara Kerja EXCEPTION
Setiap kali exception muncul, semua perintah berikutnya di dalam executeble section tidak dieksekusi dan proses akan berpindah ke exception handler.
Contoh:
DECLARE ... BEGIN ... SELECT NIM INTO vnim FROM MAHASISWA WHERE... ... EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(‘DATA TIDAK ADA’); END; |
Misalkan ketika proses SELECT tidak menghasilkan baris data apapun, Oracle akan membangkitkan error dengan kode ORA-01403. Begitu error tersebut muncul, proses akan berpindah ke bagian exception section.
Bentuk umum blok exception adalah sebagai berikut:
EXCEPTION WHEN exception1 [OR exception2 [OR ...]] THEN Statement-statement [ WHEN exceptiona [OR exceptionb [OR ...]] THEN statement-statement ] ... [ WHEN OTHERS THEN statement-statement ] |
Beberapa jenis kesalahan yang umum terjadi antara lain :
Jenis Error | Keterangan |
Syntax Error | Misal kurang tanda ; dan ‘ dalam penulisan statement |
Logic Error | Loop yang tanpa berhenti, urutan dari operator |
Compile Error | Penggunaan perintah yang salah yang baru diketahui pada saat di compile |
Run Time Error | Error yang terjadi pada saat program dijalankan |
Predefined EXCEPTION
Beberapa jenis error yang sangat umum dimasukkan ke dalam predefined exception sehingga seorang user dapat membuat penanganan error terhadap exception yang umum tersebut tanpa harus mengetahui kode error-nya.
Nama Exception | Kode Error | Deskripsi |
CURSOR_ALREADY_OPEN | ORA-06511 | Membuka cursor yang sedang terbuka |
DUP_VAL_ON_INDEX | ORA-00001 | Memasukkan nilai duplikat pada kolom unik |
INVALID_CURSOR | ORA-01001 | Operasi cursor ilegal |
INVALID_NUMBER | ORA-01722 | Gagal mengkonversi karakter ke NUMBER. |
LOGIN_DENIED | ORA-01017 | Login dengan username atau password yang salah. |
NO_DATA_FOUND | ORA-01403 | SELECT INTO statement tidak menghasilkan baris data. |
NOT_LOGGED_ON | ORA-01012 | Mengakses database tetapi tidak terkoneksi. |
PROGRAM_ERROR | ORA-06501 | Terjadi PL/SQL internal error. |
ROWTYPE_MISMATCH | ORA-06504 | Dalam satu penugasan, tipe data antara cursor, variabel dengan PL/SQL cursor tidak cocok |
STORAGE_ERROR | ORA-06500 | Memori rusak atau proses membutuhkan memori yang lebih besar. |
TIMEOUT_ON_RESOURCE | ORA-00051 | Time out. |
TOO_MANY_ROWS | ORA-01422 | SELECT INTO statement menghasilkan lebih dari satu baris data. |
VALUE_ERROR | ORA-06502 | Kesalahan pada operasi aritmetika, konversi, truncate atau batasan rentang nilai. |
ZERO_DIVIDE | ORA-01476 | Membagi dengan nol. |
Contoh:
DECLARE v_pembagi NUMBER := ‘&v_pembagi’; v_hasil NUMBER := 1000; BEGIN v_hasil := v_hasil/v_pembagi; DBMS_OUTPUT.PUT_LINE(v_hasil); EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE(‘dibagi dengan nol’); END; |
User Defined EXCEPTION
Merupakan exception yang dibuat oleh user dan diaktifkan dengan perintah RAISE.
Sintaks:
Identifier EXCEPTION; |
Dan dibangkitkan dengan perintah:
RAISE Identifier; |
Unhandled EXCEPTION
Penggunaan kata kunci OTHERS yang digunakan untuk menampilkan kesalahan dan keterangan kesalahan pada exception others. Jenis exception OTHERS ini digunakan untuk menangani semua kesalahan yang tidak ditangani. Sebaiknya hindari penggunaan exception OTHERS ini dihindari karena tidak menangani exception yang sifatnya spesifik.
Contoh:
DECLARE Exep_lebih EXCEPTION; v1 NUMBER := ‘&v1’; v2 NUMBER := 99; BEGIN If v1 > v2 then RAISE Exep_lebih; else DBMS_OUTPUT.PUT_LINE('volume masih bisa menampung'); End if; EXCEPTION WHEN Exep_lebih THEN DBMS_OUTPUT.PUT_LINE('volume '|| v1 ||'lebih dari '|| v2); WHEN OTHERS then DBMS_OUTPUT.PUT_LINE('volume tidak bisa menampung'); END; |
Menggunakan RAISE_APPLICATION_ERROR
RAISE_APPLICATION_ERROR merupakan sebuah prosedur yang disediakan oleh Oracle yang dapat digunakan untuk membuat dan sekaligus membangkitkan sebuah exception dengan cara membuat pesan dan nomor kesalahan untuk sebuah aplikasi. Nomor kesalahan harus berada dalam rentang nilai -20999 dan
-20000.
Sintaks:
|
Contoh:
|
EXCEPTION INIT PRAGMA
Exception_init pragma memungkinkan dibuatnya suatu exception (yang sifatnya sama dengan predefine exception) yang dikaitkan dengan nomor kesalahan. Keuntungan dari penggunaan exception_init ini adalah tidak diperlukan lagi pengecekan kondisi secara eksplisit.
Contoh:
declare
v_nama varchar2(20) := ‘&vnama’;
v_nim char(9) := ‘&vnim’;
v_alamat varchar2(25) := ‘&valamat’;
jangan_null exception;
kepanjangan exception;
pragma exception_init(jangan_null,-1400);
pragma exception_init(kepanjangan,-6502);
begin
insert into Mahasiswa values(v_nim,v_nama,v_alamat);
exception
when jangan_null then
dbms_output.put_line('kolom harus diisi');
when kepanjangan then
dbms_output.put_line('isinya kepanjangan');
when others then
dbms_output.put_line('apa coba yang salah?');
Terima kasih kak, sangat membantu!
BalasHapus