Anda di halaman 1dari 29

Exception

05 B

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.

Handling Exceptions with PL/SQL

Handling Exceptions

Exception Types

Exception Types

Trapping Exceptions

Guidelines for Trapping Exceptions

Penempatan Exception
Setiap kali exception muncul, semua perintah berikutnya di dalam executeble section tidak dieksekusi dan proses akan berpindah ke exception handler.

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.
DECLARE

...
BEGIN ... SELECT NIM INTO vnim FROM MAHASISWA WHERE... ... EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(DATA TIDAK ADA); END;

Bentuk Umum Blok Exception

Beberapa jenis kesalahan yang umum terjadi :


Jenis Error Syntax Error Logic Error Compile Error Keterangan Misal kurang tanda ; dan dalam penulisan statement Loop yang tanpa berhenti, urutan dari operator Penggunaan perintah yang salah yang baru diketahui pada saat di compile Error yang terjadi pada saat program dijalankan

Run Time Error

Exception Type 1. 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.

Jenis-jenis Predefined Exception


Nama Exception CURSOR_ALREADY_OPEN Kode Error ORA-06511

DUP_VAL_ON_INDEX
INVALID_CURSOR INVALID_NUMBER

ORA-00001
ORA-01001 ORA-01722

LOGIN_DENIED
NO_DATA_FOUND

ORA-01017
ORA-01403

NOT_LOGGED_ON PROGRAM_ERROR

ORA-01012 ORA-06501

Deskripsi Membuka cursor yang sedang terbuka Memasukkan nilai duplikat pada kolom unik Operasi cursor ilegal Gagal mengkonversi karakter ke NUMBER. Login dengan username atau password yang salah. SELECT INTO statement tidak menghasilkan baris data. Mengakses database tetapi tidak terkoneksi. Terjadi PL/SQL internal error.

Jenis-jenis Predefined Exception (2)


Nama Exception ROWTYPE_MISMATCH Kode Error ORA-06504 Deskripsi Dalam satu penugasan, tipe data antara cursor, variabel dengan PL/SQL cursor tidak cocok Memori rusak atau proses membutuhkan memori yang lebih besar. Time out. SELECT INTO statement menghasilkan lebih dari satu baris data. Kesalahan pada operasi aritmetika, konversi, truncate atau batasan rentang nilai. Membagi dengan nol.

STORAGE_ERROR

ORA-06500

TIMEOUT_ON_RESOURCE ORA-00051 TOO_MANY_ROWS ORA-01422

VALUE_ERROR

ORA-06502

ZERO_DIVIDE

ORA-01476

Contoh 1 : Predefined Exception


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;

Contoh 2:

Contoh 3 :
Declare v_nama varchar(50); v_nama2 varchar(90); v_kode barang.kode%type:=&masukkan_kode; Begin select b.nama, p.nama into v_nama, v_nama2 from barang b join pabrik p on b.prod = p.kode where kode=v_kode; if sql%found then dbms_output.put_line('Data Barang yang Diproduksi'); dbms_output.put_line(Kode Barang: '||v_kode); dbms_output.put_line(Nama Barang: '||v_nama); dbms_output.put_line(Nama Pabrik: '||v_nama2); end if; Exception when no_data_found then dbms_output.put_line('Data tidak ada...!!!'); when too_many_rows then dbms_output.put_line('Record lebih dari 1 baris. Gunakan cursor...!!!'); End;

3. User Defined Exception


Exception yang dideklarasikan oleh user (spt halnya variabel), hanya saja tipe nya exception.

Contoh userdefined excp.

3. 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 Unhandled Exception


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;

4. 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.
RAISE_APPLICATION_ERROR(nomor_error, pesan_error [,TRUE|FALSE]); nomor_error harus berada dalam rentang -20999 dan -20000. Rentang ini sengaja disediakan untuk digunakan user. pesan_error adalah pesan kesalahan yang ingin dimunculkan.

TRUE|FALSE adalah parameter optional, dengan nilai default FALSE. TRUE bertujuan untuk menangkap exception-exception sebelumnya bersama exception ini. FALSE bertujuan menggantikan exception terdahulu dengan exception ini.

Contoh :
RAISE_APPLICATION_ERROR (angka_kesalahan, pesan [TRUE|FALSE]);

Begin Insert into mahasiswa(nim, nama, alamat) Values('30108001','jammie', 'pga'); Exception When DUP_VAL_ON_INDEX then Raise_application_error (-20000, 'nim mahasiswa harus unik'); End;

Contoh Raise_Application_Error

5. 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.

declare v_nama v_nim v_alamat varchar2(20) := &vnama; char(9) := &vnim; varchar2(25) := &valamat;

Contoh :

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?'); end;

Functions for Trapping Exceptions

1. ACCESS_INTO_NULL ORA-06530 2. CASE_NOT_FOUND ORA-06592 3. COLLECTION_IS_NULL ORA-06531 4. CURSOR_ALREADY_OPEN ORA-06511 5. DUP_VAL_ON_INDEX ORA-00001 6. INVALID_CURSOR ORA-01001 7. INVALID_NUMBER ORA-01722 8. LOGIN_DENIED ORA-01017 9. NO_DATA_FOUND ORA-01403 10.NOT_LOGGED_ON ORA-01012 11.PROGRAM_ERROR ORA-06501 12.ROWTYPE_MISMATCH ORA-06504 13.SELF_IS_NULL ORA-30625 14.STORAGE_ERROR ORA-06500 15.SUBSCRIPT_BEYOND_COUNT ORA-06533 16.SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 17.SYS_INVALID_ROWID ORA-01410 18.TIMEOUT_ON_RESOURCE ORA-00051 19.TOO_MANY_ROWS ORA-01422 20.VALUE_ERROR ORA-06502 21.ZERO_DIVIDE ORA-01476

Daftar kode predefined

Anda mungkin juga menyukai