03
Modul ke:
Eksepsi
Fakultas
FASILKOM Sabar Rudiarto, [Link], [Link]
Program Studi
Informatika
Daftar Isi
1. Pendahuluan
2. Pre-defined Exception
3. User-defined Exception
4. Soal Latihan
1. PENDAHULUAN
Dalam pembuatan sebuah Blok PL/SQL, kadang-kadang diperlukan
sebuah blok khusus yang digunakan untuk menjebak error yang
mungkin terjadi. Blok ini disebut blok eksepsi (exception block).
Sedangkan jenis-jenis error yang menyebabkan terhentinya program
secara tidak normal tersebut dikenal dengan eksepsi (exception).
Contoh eksepsi: VALUE_ERROR, ZERO_DIVIDE, TOO_MANY_ROWS, dan
sebagainya.
Tujuan Blok Eksepsi adalah menangani error-error yang telah
didefinisikan menjadi sebuah eksepsi sehingga meskipun terdapat
error, error tersebut tidak akan ditampilkan melainkan dilempar ke
bagian eksepsi.
Jenis Eksepsi :
1. Pre-defined exception
2. User-defined exception
1. PENDAHULUAN
Adapun blok eksepsi adalah sebagai berikut:
EXCEPTION
WHEN eksepsi_pertama THEN
statemen_untuk_mengatasi_eksepsi_pertama;
WHEN eksepsi_kedua THEN
statemen_untuk_mengatasi_eksepsi_kedua;
...
WHEN OTHERS THEN
statemen_untuk_mengatasi_eksepsi_lainnya;
END;
2. Pre-defined Exception
Adalah sebuah eksepsi yang telah didefinisikan atau sudah tersedia
dalam Oracle, sehingga dapat langsung menggunakan tanpa harus
membuatnya terlebih dahulu.
2. Pre-defined Exception
Contoh 1, Tanpa blok eksepsi
DECLARE
X INTEGER;
Y NUMBER;
BEGIN
X := 0;
Y := 1 / X;
DBMS_OUTPUT.PUT_LINE(‘Nilai Y = ‘ || TO_CHAR(Y));
END;
/
Hasil yang muncul dilayar:
ORA-01476 : divisor is equal to zero
2. Pre-defined Exception
Contoh 1, Dengan blok eksepsi
DECLARE
X INTEGER;
Y NUMBER;
BEGIN
X := 0;
Y := 1 / X;
DBMS_OUTPUT.PUT_LINE(‘Nilai Y = ‘ || TO_CHAR(Y));
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE(‘Terjadi kesalahan karena terdapat ‘ ||
‘pembagian dengan 0 (NOL) ‘);
END;
/
Hasil yang muncul dilayar:
Terjadi kesalahan karena terdapat pembagian dengan 0 (NOL)
2. Pre-defined Exception
Contoh 2, Tanpa blok eksepsi
DECLARE
X NUMBER;
BEGIN
X := ‘Sabar Rudiarto’;
DBMS_OUTPUT.PUT_LINE(‘Nilai X = ‘ || TO_CHAR(X) );
END;
/
Hasil yang muncul dilayar:
ORA-06502: PL/SQL: numeric or value error
2. Pre-defined Exception
Contoh 2, Dengan blok eksepsi
DECLARE
X NUMBER;
BEGIN
X := ‘Sabar Rudiarto’;
DBMS_OUTPUT.PUT_LINE(‘Nilai X = ‘ || TO_CHAR(X) );
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE(‘Pengisian nilai tidak sesuai dengan ‘ ||
‘tipe variabel’);
END;
/
Hasil yang muncul dilayar:
Pengisian nilai tidak sesuai dengan tipe variabel
2. Pre-defined Exception
Daftar nama eksepsi yang sudah tersedia dalam Oracle:
Nama Eksepsi Kode Error Keterangan
CURSOR_ALREADY_OPEN ORA-6511 Cursor masih dalam keadaan terbuka
DUP_VALUE_ON_INDEX ORA-0001 Duplikasi constraint
INVALID_CURSOR ORA-1001 Membuka cursor yang salah
INVALID_NUMBER ORA-1722 Melakukan operasi numeric pada tipe non-numerik
LOGIN_DENIED ORA-1017 Username / password salah
NO_DATA_FOUND ORA-1403 Tidak terdapat data pada query
NO_LOGGED_ON ORA-1012 Melakukan operasi database ketika tidak terhubung (connect)
PROGRAM_ERROR ORA-6501 Kesalahan internal
ROWTYPE_MISMATCH ORA-6504 Host variable dan cursor mempunyai tipe yang tidak sama
STORAGE_ERROR ORA-6500 Kesalahan internal
TYMEOUT_ON_RESOURCE ORA-0051 Terjadi timeout
TOO_MANY_ROWS ORA-1422 Statemen SELECT INTO yang mengembalikan lebih dari satu baris
TRANSACTION_BACK_ED_OUT ORA-006 Rollback transaksi untuk didealokasikan
VALUE_ERROR ORA-6502 Konversi atau truncation salah
ZERO_DIVIDE ORA-1476 Pembagian dengan nol
3. User-defined Exception
Selain nama-nama eksepsi yang telah didefinisikan atau yang telah
disediakan oleh Oracle, Anda dapat membuat eksepsi sendiri sesuai
keperluan atau kasus yang anda hadapi, eksepsi semacam ini disebut
user-defined exception.
Untuk membuat sebuah eksepsi, Anda harus mendeklarasikan sebuah
variabel yang bertipe EXCEPTION sebagai nama eksepsi dan
dihubungkan dengan kode error dari Oracle dengan cara menggunakan
statemen PRAGMA EXCEPTION_INIT pada bagian deklarasi dari sebuah
blok PL/SQL. Adapun sintak umum untuk pendeklarasiannya sebagai
berikut :
DECLARE
Nama_eksepsi EXCEPTION;
PRAGMA EXCEPTION_INIT (nama_eksepsi, kode_error);
3. User-defined Exception
Perlu diperhatikan bahwa kode_error harus negative atau
menambahkan tanda minus (-) di depan kode_error tersebut.
Contoh, tanpa blok eksepsi
DECLARE
X ROWID;
BEGIN
SELECT ROWID INTO X FROM ALL_VIEWS;
END;
/
Hasil yang muncul dilayar:
ORA-01445: cannot select ROWID from view of more than one table
3. User-defined Exception
Contoh, Dengan blok eksepsi
DECLARE
eksepsiku EXCEPTION;
PRAGMA EXCEPTION_INIT (eksepsiku,-01445);
X ROWID;
BEGIN
SELECT ROWID INTO X FROM ALL_VIEWS;
EXCEPTION
WHEN eksepsiku THEN
DBMS_OUTPUT.PUT_LINE (‘KESALAHAN : Tidak dapat’ ||
‘Menampilkan ROWID dari beberapa tabel atau view’);
END;
/
3. User-defined Exception
Hasil yang muncul dilayar:
KESALAHAN : Tidak dapat Menampilkan ROWID dari beberapa tabel
atau view
4. Soal Latihan
1. Perbaikilah blok PL/SQL di bawah ini dengan menambahkan blok
eksepsi sehingga eksepsi yang terjadi dapat diatasi. Blok PL/SQL
yang dimaksud adalah sebagai berikut:
DECLARE
S NUMBER;
BEGIN
SELECT ‘TEST’ INTO S FROM DUAL;
DBMS_OUTPUT.PUT_LINE (TO_CHAR(S));
END;
/
4. Jawaban Latihan
DECLARE
S NUMBER;
BEGIN
SELECT ‘TEST’ INTO S FROM DUAL;
DBMS_OUTPUT.PUT_LINE (TO_CHAR(S));
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE(‘Terjadi kesalahan tipe variabel’);
END;
/
Terima Kasih
Sabar Rudiarto, [Link]., [Link].