05 B
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
Exception Types
Exception Types
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;
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.
STORAGE_ERROR
ORA-06500
VALUE_ERROR
ORA-06502
ZERO_DIVIDE
ORA-01476
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. 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.
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
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;
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