Contoh minimalnya adalah:
CREATE FUNCTION raise_exception RETURN INT
IS
BEGIN
RAISE NO_DATA_FOUND;
END;
/
Jika Anda melakukannya:
SELECT raise_exception
FROM DUAL;
Anda akan mendapatkan satu baris berisi NULL
nilai - Tanya Tom menyatakan:
dan kemudian ditindaklanjuti dengan:
Jadi pengecualian dimunculkan dalam fungsi dan klien SQL melihat ini dan menafsirkan ini karena tidak ada data yang merupakan NULL
nilai dan "menangani" pengecualian.
Jadi
DECLARE
variable_name VARCHAR2(50);
BEGIN
SELECT raise_exception
INTO variable_name
FROM DUAL
END;
/
Akan berhasil sebagai DUAL
tabel memiliki satu baris dan pengecualian dari fungsi akan ditangani (diam-diam) dan variabel akan berakhir berisi NULL
nilai.
Namun,
BEGIN
DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/
Pengecualian kali ini diteruskan dari fungsi ke ruang lingkup PL/SQL - yang tidak menangani kesalahan dan meneruskan pengecualian ke blok penangan pengecualian (yang tidak ada) sehingga kemudian diteruskan ke ruang lingkup aplikasi dan menghentikan eksekusi program.
Dan Ask Tom menyatakan:
Sekarang, jika kita mengubah fungsi untuk memunculkan pengecualian yang berbeda:
CREATE OR REPLACE FUNCTION raise_exception RETURN INT
IS
BEGIN
RAISE ZERO_DIVIDE;
END;
/
Kemudian keduanya:
SELECT raise_exception
FROM DUAL;
dan:
BEGIN
DBMS_OUTPUT.PUT_LINE( raise_exception );
END;
/
tidak tahu bagaimana menangani pengecualian dan mengakhiri dengan ORA-01476 divisor is equal to zero
.