Praktikum 3
ERROR HANDLING
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