Tuesday 10 March 2015

Modul 3 Praktikum Data Mining "Error Handling"

 Praktikum 3
ERROR HANDLING

Tujuan :
1. Mampu memahami cara kerja EXCEPTION
2. Mampu memahami Predefined Exception pada Oracle
3. Mampu memahami User Defined Exception
4. Mampu memahami Unhandled Exception
5. Mampu memahami penggunaan RAISE_APPLICATION_ERROR
6. Mampu memahami EXCEPTION INIT PRAGMA
7. Mampu menerapkan exception dalam PL/SQL di Oracle
8. Mampu menguasai dam menerapkan Multi Blok dalam PL/SQL

Alat dan Bahan :
1. Buku literatur mengenai PL/SQL ORACLE, terutama yang menggunakan DBMS ORACLE 10g.
2. Modul praktikum BASIS DATA LANJUT
3. Modul praktikum DATA MINING DAN WAREHOUSING



Landasan Teori :
1.      Pendahuluan
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.

2.      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
 
3.      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
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 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;

 4.      User Defined EXCEPTION
Merupakan exception yang dibuat oleh user dan diaktifkan dengan perintah RAISE.

Sintaks:  
Identifier EXCEPTION;
Dan dibangkitkan dengan perintah:  
RAISE Identifier;

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

6.      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;




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


Tugas Pendahuluan :
1.      Sebutkan dan jelaskan kegunaan dari error handling pada PL/SQL
2.      Jalankan dan jelaskan maksud blok PL/SQL di bawah ini :
DECLARE  v_nama  varchar2(20) := ‘&vnama’; v_nim   char(9) := ‘&vnim’; v_alamat    varchar2(25) := ‘&valamat’;  jangan_null  exception;  kepanjangan exception; 
PRAGME EXCEPTION_INIT(jangan_null,-1400); 
PRAGME 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;

 


Percobaan :
1.      Lakukan IMPORT atas database yang telah dibuat pada modul praktikum sebelumnya.

2.      Tambahkan EXCEPTION pada blok PL/SQL berikut ini :
DECLARE  pe_ratio NUMBER(3,1);
BEGIN 
SELECT price/earnings INTO pe_ratio FROM buku 
WHERE id_jenis = 'IT’; 
-- exception handlers might cause division-by-zero error
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);  
COMMIT; 
END;  

3.      Buatlah CURSOR untuk mengambil nilai stok buku pada tabel buku kemudian buatlah EXCEPTION untuk menangani kesalahan ketika stok buku yang dihasilkan bernilai nol. 



0 komentar:

Post a Comment