Sebuah Informasi yang cukup bermanfaat bagi yang ingin mempelajari PL/SQL, karena ini termasuk dasar dari PL/SQL.
Handling Exceptions merupakan salah satu kelebihan dari PL/SQL yang digunakan untuk menangani error yang terjadi pada saat run time.
Handling Exceptions merupakan salah satu kelebihan dari PL/SQL yang digunakan untuk menangani error yang terjadi pada saat run time.
Sebagai contoh, pada saat kita menuliskan sebuah query,
dan data tersebut tidak ditemukan di dalam database, maka oracleakan
membangkitkan eksepsi NO_DATA_FOUND dengan kode ORA-01403 yang
berarti data tidak ditemukan. Berikut ini kita akan menuliskan perbedaan dengan
menggunakan blok eksepsi dengan yang tidak menggunakan blok eksepsi.
Contoh Yang
tidak Menggunakan blok eksepsi :
SET SERVEROUTPUT ON
DECLARE
BEGIN
SELECT
WHERE
DBMS_OUTPUT.PUT_LINE
END;
DECLARE
nama
employees.last_name
%type;BEGIN
SELECT
last_name
INTO nama
FROM employees
WHERE
employee_id = 309;
DBMS_OUTPUT.PUT_LINE
('nama');
END;
Hasilnya:
DECLARE
*
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4
ORA-01403: no data found
ORA-06512: at line 4
Contoh Yang
Menggunakan Blok Eksepsi :
SET SERVEROUTPUT ON
DECLARE
BEGIN
SELECT
WHERE
DBMS_OUTPUT.PUT_LINE
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
END;
DECLARE
nama
employees.last_name
%type;BEGIN
SELECT
last_name
INTO nama
FROM employees
WHERE
employee_id = 309;
DBMS_OUTPUT.PUT_LINE
('nama');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
('TIdak Ditemukan Datanya dalam Database');
END;
Hasilnya :
TIdak Ditemukan Datanya dalam Database
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Berikut ini merupakan nama beserta Code exception di PL/SQL

Berikut
ini merupakan keterangan dari nama exception di PL/SQL


Pada
variabel dengan tipe data skalar, kita
tidak dapat menampung banyak nilai dalam variabel tersebut, untuk menangani
error yang terjadi ketika kita memasukkan banyak nilai ke dalam satu variabel
skalar, maka kita menggunakan EXCEPTION TOO_MANY_ROWS
Contoh :
DECLARE
BEGIN
SELECT
DBMS_OUTPUT.PUT_LINE
EXCEPTION
WHEN TOO_MANY_ROWS THEN
empno
NUMBER;BEGIN
SELECT
employee_id
INTO empno
FROM employees ;
DBMS_OUTPUT.PUT_LINE
(empno);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE
END;
('THERE ARE TOO MANY ROWS');
END;
Hasilnya :
THERE ARE TOO MANY ROWS
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Kita tidak perlu menghafal semua nama dari setiap exception handling diatas,
kita cukup hanya menghafal beberapa saja dan sisanya kita dapat menggunakan
eksepsi OTHERS.
DECLARE
BEGIN
SELECT
DBMS_OUTPUT.PUT_LINE
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE
END;
empno
NUMBER;BEGIN
SELECT
employee_id
INTO empno
FROM employees ;
DBMS_OUTPUT.PUT_LINE
(empno);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
('Data Tidak Ditemukan');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE
('Terjadi Error yang Lain');
END;
Hasil :
Terjadi Error yang Lain
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PRAGMA EXCEPTION INIT
PRAGMA
EXCEPTION INIT digunakan
agar kita dapat mendefinisikan nama EXCEPTION kita sendiri, tetapi
berdasakan dengan ERROR CODE yang ada.
contoh :
SET SERVEROUTPUT ON
DECLARE
kebanyakan
EXCEPTION;
PRAGMA EXCEPTION_INIT
(kebanyakan, -01422);
emp
employees.employee_id
%type;
BEGIN
SELECT
DBMS_OUTPUT.PUT_LINE
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
SELECT
employee_id
INTO emp
FROM Employees;
DBMS_OUTPUT.PUT_LINE
(EMP);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
('Hasil tidak ditemukan');
WHEN kebanyakan THEN
DBMS_OUTPUT.PUT_LINE(‘hasilnya kebanyakan’);
DBMS_OUTPUT.PUT_LINE(‘hasilnya kebanyakan’);
END;
Penjelasan :
Pada
mulanya error code -01422 merupakan code exception dari TOO_MANY_ROWS, tetapi
dengan menggunakan PRAGMA_EXCEPTION_INIT, kita merubah TOO_MANY_ROW menjadi
KEBANYAKAN. Yang sebelumnya, KEBANYAKAN telah dideklarasikan terlebih dahulu
dengan menjadi sebuah EXCEPTION.
SQLCODE dan SQLERRM
SQLCODE dan
SQLERRM biasa
digunakan pada EXCEPTION OTHERS untuk mengetahui error apa yang terjadi.
SQLCODE untuk menampilkan kode eksepsi, sedangkan SQLERRM digunakan untuk
menampilkan keterangan eksepsi.
contoh :
SET SERVEROUTPUT ON
DECLARE
DECLARE
emp employees
%rowtype;
BEGIN
SELECT
SELECT
* into emp
FROM EMPLOYEES WHERE employee_id > 100;
EXCEPTION
WHEN
DBMS_OUTPUT.PUT_LINE
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE
DBMS_OUTPUT.PUT_LINE
DBMS_OUTPUT.PUT_LINE
WHEN
no_data_found
THENDBMS_OUTPUT.PUT_LINE
('No Data Found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE
('ERROR');
DBMS_OUTPUT.PUT_LINE
('error code ='||
SQLCODE);
DBMS_OUTPUT.PUT_LINE
('error message ='||
SQLERRM);
END;
Hasilnya :
ERROR
error code =-1422
error message =ORA-01422: exact fetch returns more than requested number of rows
PL/SQL procedure successfully completed.
error code =-1422
error message =ORA-01422: exact fetch returns more than requested number of rows
PL/SQL procedure successfully completed.
RAISE APPLICATION ERROR
Pada
PRAGMA EXCEPTION INIT kita hanya dapat mendefinisikan sendiri nama dari eksepsi
tersebut dan masih harus sesuai dengan ERROR CODEnya. Tetapi dengan menggunakan
RAISE APPLICATION ERROR, kita dapat menentukan sendiri nama beserta code dari
eksepsi yang kita inginkan.
contoh :
SET SERVEROUTPUT ON
DECLARE
BEGIN
SELECT
name
VARCHAR2(100);sal
NUMBER;BEGIN
SELECT
last_name, salary
INTO name, sal
FROM employees
WHERE employee_id = 120;
IF
RAISE_APPLICATION_ERROR
END IF;
sal > 5000
THENRAISE_APPLICATION_ERROR
(-20000,'Gaji Kebanyakan');
END IF;
DBMS_OUTPUT.PUT_LINE
END;
(name||' '||sal);
END;
Hasilnya :
DECLARE *
ERROR at line 1:
ORA-20000: Gaji Kebanyakan
ORA-06512: at line 8
DECLARE *
ERROR at line 1:
ORA-20000: Gaji Kebanyakan
ORA-06512: at line 8
Komentar ini telah dihapus oleh pengarang.
BalasHapus