Menangani PL/SQL Errors

7.5. Bagaimana PL/SQL Exceptions Muncul

Internal exceptions dimunculkan secara implisit oleh run-time system, seperti halnya user-defined exceptions yang telah kita hubungkan dengan sebuah Oracle error number dengan menggunakan EXCEPTION_INIT. Namun, user-defined exceptions yang lain harus dimunculkan secara eksplisit dengan perintah-perintah RAISE.

7.5.1. Memunculkan Exceptions dengan Perintah RAISE

Blok dan subprogram PL/SQL harus memunculkan exception hanya jika sebuah error membuatnya tidak diinginkan atau tidak mungkin untuk menyelesaikan pemrosesan. Kita bisa menempatkan perintah-perintah RAISE untuk exception dimanapun bersama jangkauan dari exception tersebut. Dalam contoh dibawah ini, kita memperingatkan blok PL/SQL kepada user-defined exception bernama out_of_stock:

DECLARE
  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
    -- menangani error
END;

Kita dapat juga memunculkan sebuah predefined exception secara eksplisit. Dengan cara ini, sebuah exception handler yang ditulis untuk predefined exception dapat memproses errors yang lain, seperti ditunjukkan oleh contoh berikut ini:

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

7.6. Bagaimana PL/SQL Exceptions Menyebar

Ketika sebuah exception dimunculkan, jika PL/SQL tidak dapat menemukan sebuah handler untuknya dalam blok atau subprogram, maka exception menyebar. Dengan demikian, exception tersebut meniru dirinya sendiri dalam enclosing blocks secara berturut-turut sampai sebuah handler ditemukan atau tidak ada blok-blok lain yang dicari. Dalam kasus terakhir, PL/SQL mengembalikan sebuah unhandled exception error kepada host environment.

Namun, exceptions tidak dapat menyebar melewati remote procedure calls (RPCs). Dengan demikian, sebuah blok PL/SQL tidak dapat menangkap sebuah exception yang dimunculkan dari sebuah remote subprogram.

Gambar 7-1, 7-2, dan 7-3 menggambarkan aturan-aturan dasar penyebaran.

Gambar 7-1 Aturan Penyebaran: Contoh 1

 


Gambar 7-2 Aturan Penyebaran: Contoh 2

 

Gambar 7-3 Aturan Penyebaran: Contoh 3

Sebuah exception dapat menyebar melebihi jangkauannya, sehingga, diluar blok dimana ia dideklarasikan sebelumnya. Mari kita perhatikan contoh berikut ini:

BEGIN
  ...
  DECLARE ---------- sub-blok mulai
  past_due EXCEPTION;
BEGIN
  ...
  IF ... THEN
    RAISE past_due;
  END IF;
END; ------------- sub-blok berakhir
  EXCEPTION
  ...
  WHEN OTHERS THEN
    ROLLBACK;
END;

Karena blok dimana exception past_due dideklarasikan tidak memiliki handler untuknya, exception menyebar ke blok yang melingkupinya (enclosing block). Namun, berdasarkan aturan-aturan jangkauan, enclosing blocks tidak dapat merefer kepada exceptions yang dideklarasikan di dalam sebuah sub-blok. Sehingga, hanya OTHER handler yang dapat menangkap exception tersebut. Jika tidak terdapat handler untuk user-defined exception, aplikasi pemanggil mendapatkan error dibawah ini:

ORA-06510: PL/SQL: unhandled user-defined exception

 

 

Pages: 1 2 3 4 5 6 7


Bookmark and Share

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma, Uranus dsb.

 

Find Related articles