powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

31
Modul ke: Fakultas Program Studi Validasi dan Penanganan Kesalahan dalam PL/SQL Membuat penanganan kesalahan sederhana dalam PL/SQL Albaar Rubhasy, S.Si., M.T.I. 0 6 FASILKOM Sistem Informasi

Upload: albaar-rubhasy

Post on 20-May-2015

183 views

Category:

Education


3 download

DESCRIPTION

Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

TRANSCRIPT

Page 1: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Modul ke:

Fakultas

Program Studi

Validasi dan Penanganan Kesalahan dalam PL/SQLMembuat penanganan kesalahan sederhana dalam PL/SQL

Albaar Rubhasy, S.Si., M.T.I.

06

FASILKOM

Sistem Informasi

Page 2: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Outline Perkuliahan

• Penanganan Kesalahan Pada PL/SQL• Jenis-jenis PL/SQL Exception• Merancang Sendiri PL/SQL Exception• Mengangkat PL/SQL Exception

Page 3: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penanganan Kesalahan Pada PL/SQLModul 06: Validasi dan Penanganan Kesalahan dalam PL/SQLMembuat penanganan kesalahan sederhana dalam PL/SQL

Page 4: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penanganan Kesalahan

• Kesalahan dalam penulisan kode program merupakan suatu hal yang wajar.

• Penanganan kesalahan (error/exception handling) merupakan mekanisme untuk mengantisipasi, mendeteksi, dan resolusi dari suatu program.

• Ada dua jenis kesalahan:– Development error : kesalahan pada sintaks atau logika

pemrograman.– Run-time error : kesalahan pada eksekusi program akibat

input parameter atau data yang tidak valid.

• Jika terjadi kesalahan, biasanya muncul pesan error.

Page 5: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penanganan Kesalahan Pada PL/SQL• Peringatan atau kondisi error pada PL/SQL

disebut sebagai exception.• Exception dapat didefinisikan secara internal

(run-time system) atau eksplisit oleh user.• Exception dapat didefinisikan pada bagian

deklaratif pada blok PL/SQL, subprogram, ataupun package.

• Exception yang didefinisikan oleh user harus diberi nama dan menggunakan kata kunci RAISE.

Page 6: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Contoh Error Handling Pada PL/SQLDECLARE pe_ratio NUMBER(3,1);BEGIN SELECT price / earnings INTO pe_ratio FROM stocks WHERE symbol = 'XYZ'; -- might cause division-by-zero error INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio); COMMIT;EXCEPTION -- exception handlers begin WHEN ZERO_DIVIDE THEN -- handles 'division by zero' error INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL); COMMIT; ... WHEN OTHERS THEN -- handles all other errors ROLLBACK;END; -- exception handlers and block end here

Page 7: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Keunggulan PL/SQL Exception• Tanpa penanganan kesalahan, setiap kali menjalankan

perintah akan divalidasi.

• Dengan exception, maka penanganan kesalahan dapat dilakukan secara praktis

BEGIN SELECT ... -- check for 'no data found' error SELECT ... -- check for 'no data found' error SELECT ... -- check for 'no data found' error

BEGIN SELECT ... SELECT ... SELECT ... ...EXCEPTION WHEN NO_DATA_FOUND THEN -- catches all 'no data found' errors

Page 8: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Jenis-jenis PL/SQL ExceptionModul 06: Validasi dan Penanganan Kesalahan dalam PL/SQLMembuat penanganan kesalahan sederhana dalam PL/SQL

Page 9: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Jenis-jenis PL/SQL Exception• Ada 3 tipe PL/SQL Exception:

– Named System Exception– Unnamed System Exception– User defined Exception

• Named System Exception merupakan validasi kesalahan yang disediakan secara otomatis oleh sistem.

• Unnamed System Exception merupakan validasi kesalahan yang tidak didefinisikan oleh sistem.

• User defined exception merupakan penanganan kesalahan yang dideklarasikan oleh user.

Page 10: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Internal PL/SQL Exception Exception Oracle Error SQLCODE Value

ACCESS_INTO_NULL ORA-06530 -6530

CASE_NOT_FOUND ORA-06592 -6592

COLLECTION_IS_NULL ORA-06531 -6531

CURSOR_ALREADY_OPEN ORA-06511 -6511

DUP_VAL_ON_INDEX ORA-00001 -1

INVALID_CURSOR ORA-01001 -1001

INVALID_NUMBER ORA-01722 -1722

LOGIN_DENIED ORA-01017 -1017

NO_DATA_FOUND ORA-01403 +100

NOT_LOGGED_ON ORA-01012 -1012

PROGRAM_ERROR ORA-06501 -6501

ROWTYPE_MISMATCH ORA-06504 -6504

Page 11: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Internal PL/SQL Exception (lanj.) Exception Oracle Error SQLCODE Value

SELF_IS_NULL ORA-30625 -30625

STORAGE_ERROR ORA-06500 -6500

SUBSCRIPT_BEYOND_COUNT ORA-06533 -6533

SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 -6532

SYS_INVALID_ROWID ORA-01410 -1410

TIMEOUT_ON_RESOURCE ORA-00051 -51

TOO_MANY_ROWS ORA-01422 -1422

VALUE_ERROR ORA-06502 -6502

ZERO_DIVIDE ORA-01476 -1476

Page 12: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penjelasan PL/SQL Exception Exception Keterangan

ACCESS_INTO_NULL Program Anda mencoba untuk menempatkan nilai ke atribut dari terinisialisasi (atomik null) objek.

CASE_NOT_FOUND Tak satu pun dari pilihan di klausa WHEN dari pernyataan CASE dipilih, dan tidak ada klausul ELSE.

COLLECTION_IS_NULL Program Anda mencoba menerapkan metode pengumpulan selain EXISTS ke terinisialisasi (atomik null) tabel bersarang atau varray, atau program mencoba untuk memberikan nilai pada unsur-unsur dari tabel bersarang terinisialisasi atau varray.

CURSOR_ALREADY_OPEN Program Anda mencoba untuk membuka kursor sudah terbuka. Kursor harus ditutup sebelum dapat dibuka kembali. Sebuah kursor FOR loop otomatis membuka kursor yang diacunya. Jadi, program anda tidak dapat membuka kursor yang di dalam lingkaran.

DUP_VAL_ON_INDEX Program Anda mencoba untuk menyimpan nilai-nilai duplikat dalam kolom database yang dibatasi oleh indeks yang unik.

INVALID_CURSOR Program Anda mencoba operasi kursor ilegal seperti menutup kursor belum dibuka.

Page 13: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penjelasan PL/SQL Exception (lanj.)Exception Keterangan

INVALID_NUMBER Dalam sebuah pernyataan SQL, konversi karakter string menjadi nomor gagal karena string tidak mewakili angka yang benar. (Dalam pernyataan prosedural, VALUE_ERROR dinaikkan.) Pengecualian ini juga muncul ketika ekspresi LIMIT-klausul dalam FETCH massal tidak mengevaluasi ke angka positif.

LOGIN_DENIED Program Anda mencoba untuk log on ke Oracle dengan nama yang tidak valid dan / atau password.

NO_DATA_FOUND Sebuah SELECT INTO tidak mengembalikan baris, atau referensi program elemen dihapus dalam tabel bersarang atau elemen terinisialisasi dalam tabel indeks-oleh. Fungsi agregat SQL seperti AVG dan SUM selalu mengembalikan nilai atau null. Jadi, SELECT INTO yang memanggil fungsi agregat tidak pernah menimbulkan NO_DATA_FOUND. The FETCH diharapkan kembali ada baris akhirnya, jadi ketika itu terjadi, tidak terkecuali dinaikkan.

NOT_LOGGED_ON Program Anda mengeluarkan panggilan basis data tanpa terhubung ke Oracle.

PROGRAM_ERROR PL / SQL memiliki masalah internal.

Page 14: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penjelasan PL/SQL Exception (lanj.)Exception Keterangan

ROWTYPE_MISMATCH Tuan rumah kursor variabel dan PL / SQL variabel kursor terlibat dalam tugas memiliki tipe kembali tidak kompatibel. Sebagai contoh, ketika sebuah variabel kursor tuan terbuka dilewatkan ke subprogram yang tersimpan, kembali jenis parameter aktual dan formal harus kompatibel.

SELF_IS_NULL Program Anda mencoba untuk memanggil metode MEMBER pada contoh null. Artinya, built-in parameter SELF (yang selalu parameter pertama dilewatkan ke metode MEMBER) adalah null.

STORAGE_ERROR PL / SQL kehabisan memori atau memori telah rusak.

SUBSCRIPT_BEYOND_COUNT Referensi program anda sebuah tabel bersarang atau elemen varray menggunakan nomor indeks lebih besar dari jumlah elemen dalam koleksi.

SUBSCRIPT_OUTSIDE_LIMIT Referensi program anda sebuah tabel bersarang atau elemen varray menggunakan nomor indeks (-1 misalnya) yang berada di luar jangkauan hukum.

SYS_INVALID_ROWID Konversi karakter string menjadi rowid universal yang gagal karena karakter string tidak mewakili rowid valid.

TIMEOUT_ON_RESOURCE Sebuah time-out terjadi ketika Oracle menunggu sumber daya.

Page 15: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Penjelasan PL/SQL Exception (lanj.)Exception Keterangan

TOO_MANY_ROWS Sebuah SELECT INTO kembali lebih dari satu baris.

VALUE_ERROR Aritmatika, konversi, pemotongan, atau ukuran-kendala kesalahan terjadi. Sebagai contoh, ketika program anda memilih suatu kolom nilai ke dalam variabel karakter, jika nilai lebih panjang daripada panjang dinyatakan variabel, PL / SQL dibatalkan tugas dan meningkatkan VALUE_ERROR. Dalam pernyataan prosedural, VALUE_ERROR dimunculkan jika konversi string karakter menjadi nomor gagal. (Dalam pernyataan SQL, INVALID_NUMBER dinaikkan.)

ZERO_DIVIDE Program Anda mencoba untuk membagi angka dengan nol.

Page 16: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Merancang Sendiri PL/SQL ExceptionModul 06: Validasi dan Penanganan Kesalahan dalam PL/SQLMembuat penanganan kesalahan sederhana dalam PL/SQL

Page 17: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

User Defined PL/SQL Exception• Tidak seperti internal exception, user defined

exception harus dideklarasikan dan dijalankan secara eksplisit (dg kata kunci RAISE).

• Cara mendeklarasikan exception:

Bentuk Umum

DECLARE exception_name EXCEPTION;

Page 18: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Aturan Penulisan PL/SQL Exception• Tidak boleh mendeklarasikan exception dua

kali di blok yang sama. Namun, exception yang sama boleh ditulis dalam dua blok yang berbeda.

• Blok exception bersifat lokal!

Page 19: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Contoh Penulisan PL/SQL ExceptionDECLARE past_due EXCEPTION; acct_num NUMBER;BEGIN DECLARE ---------- sub-block begins past_due EXCEPTION; -- this declaration prevails acct_num NUMBER; BEGIN ... IF ... THEN RAISE past_due; -- this is not handled END IF; END; ------------- sub-block endsEXCEPTION WHEN past_due THEN -- does not handle RAISE exception ...END;

Page 20: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Pragma EXCEPTION_INIT

• Untuk menangani kondisi error yang tidak didefinisikan oleh sistem, dapat digunakan Pragma EXCEPTION_INIT.

• Pragma adalah direktif compiler yang diproses pada waktu kompilasi, bukan pada waktu berjalan.

• Pragma EXCEPTION_INIT memberitahu compiler untuk mengasosiasikan nama exception dengan nomor error Oracle (format: ORA-xxxxx).

Bentuk Umum

PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);

Page 21: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Contoh Pragma EXCEPTION_INIT

DECLARE deadlock_detected EXCEPTION; PRAGMA EXCEPTION_INIT(deadlock_detected, -60);BEGIN ... -- Some operation that causes an ORA-00060 errorEXCEPTION WHEN deadlock_detected THEN -- handle the errorEND;

Page 22: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Procedure RAISE_APPLICATION_ERROR

• User dapat membuat pesan ORA-error menggunakan prosedur RAISE_APPLICATION_ERROR.

– error_number adalah bilangan bulat negatif dalam interval -20.000 s/d -20.999.

– message adalah string karakter dg panjang hingga 2048 byte.

– Jika parameter opsional ketiga adalah TRUE, error ditempatkan pada tumpukan kesalahan sebelumnya. Jika FALSE (default), error menggantikan semua kesalahan sebelumnya.

Bentuk Umum

raise_application_error(error_number, message[, {TRUE | FALSE}]);

Page 23: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Contoh Procedure RAISE_APPLICATION_ERROR

CREATE PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) AS curr_sal NUMBER;BEGIN SELECT sal INTO curr_sal FROM emp WHERE empno = emp_id; IF curr_sal IS NULL THEN /* Issue user-defined error message. */ raise_application_error(-20101, 'Salary is missing'); ELSE UPDATE emp SET sal = curr_sal + amount WHERE empno = emp_id; END IF;END raise_salary;

Page 24: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Mengangkat PL/SQL ExceptionModul 06: Validasi dan Penanganan Kesalahan dalam PL/SQLMembuat penanganan kesalahan sederhana dalam PL/SQL

Page 25: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Mengangkat Exception dengan RAISE• PL / SQL blok dan subprogram harus

mengangkat exception hanya bila ada kesalahan yg tidak diinginkan sehingga tidak mungkin untuk diproses.

• Pernyataan RAISE dapat ditempatkan untuk suatu exception di mana saja dalam lingkup exception tsb.

Page 26: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Contoh Mengangkat Exception dg RAISEDECLARE out_of_stock EXCEPTION; number_on_hand NUMBER(4);BEGIN ... IF number_on_hand < 1 THEN RAISE out_of_stock; END IF;EXCEPTION WHEN out_of_stock THEN -- handle the errorEND;

Page 27: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

DECLARE acct_type INTEGER := 7;BEGIN IF acct_type NOT IN (1, 2, 3) THEN RAISE INVALID_NUMBER; -- raise predefined exception END IF;EXCEPTION WHEN INVALID_NUMBER THEN ROLLBACK;END;

Page 28: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Propagasi PL/SQL Exception• Jika suatu exception diangkat, namun tidak

tersedia handler pada blok atau sub program, maka exception mengalami propagasi/penyebaran.

• Exception mereproduksi dirinya dalam blok tertutup yang berurutan sampai handler ditemukan atau tidak ada lagi blok.

• Jika tidak ditemukan handler, PL/SQL akan memunculkan pesan error unhandled exception.

Page 29: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Skenario Propagasi PL/SQL Exception

Page 30: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Referensi

• http://searchsoftwarequality.techtarget.com/definition/error-handling

• http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/07_errs.htm#980

Page 31: Powerpoint pemrograman basis data & sql mg 6 fasilkom albaar rubhasy

Terima KasihAlbaar Rubhasy, S.Si., M.T.I.