Minggu, 09 Januari 2011

ERROR HANDLING

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:
RAISE_APPLICATION_ERROR
(angka_kesalahan, pesan [TRUE|FALSE]);


 
 




Contoh:
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;
 
 












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

end;

1 komentar: