La gestió d'excepcions és una part fonamental de la programació en PL/SQL. Permet als desenvolupadors manejar errors de manera controlada i evitar que el programa es bloquegi inesperadament. En aquesta secció, aprendrem com capturar i gestionar errors utilitzant les estructures d'excepcions de PL/SQL.
Conceptes clau
- Excepcions predefinides: PL/SQL proporciona un conjunt d'excepcions predefinides per a errors comuns.
- Excepcions definides per l'usuari: Els desenvolupadors poden definir les seves pròpies excepcions per manejar errors específics de l'aplicació.
- Blocs d'excepcions: Els blocs d'excepcions s'utilitzen per capturar i gestionar errors dins d'un bloc PL/SQL.
Estructura bàsica d'un bloc d'excepcions
Un bloc PL/SQL típic amb gestió d'excepcions té la següent estructura:
Excepcions predefinides
PL/SQL té diverses excepcions predefinides que es poden utilitzar per gestionar errors comuns. Algunes de les més utilitzades són:
| Excepció | Descripció |
|---|---|
NO_DATA_FOUND |
No s'ha trobat cap dada que compleixi la condició. |
TOO_MANY_ROWS |
La consulta ha retornat més d'una fila. |
ZERO_DIVIDE |
Intent de dividir per zero. |
INVALID_CURSOR |
Operació no vàlida en un cursor. |
Exemple d'ús d'excepcions predefinides
DECLARE
v_emp_name VARCHAR2(50);
BEGIN
SELECT ename INTO v_emp_name
FROM emp
WHERE empno = 1234;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with the given ID.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('More than one employee found with the given ID.');
END;Excepcions definides per l'usuari
Els desenvolupadors poden definir les seves pròpies excepcions per manejar errors específics de l'aplicació. Això es fa utilitzant la paraula clau EXCEPTION i la instrucció RAISE.
Exemple d'excepció definida per l'usuari
DECLARE
e_invalid_salary EXCEPTION;
v_salary NUMBER := 5000;
BEGIN
IF v_salary < 1000 THEN
RAISE e_invalid_salary;
END IF;
DBMS_OUTPUT.PUT_LINE('Salary is valid.');
EXCEPTION
WHEN e_invalid_salary THEN
DBMS_OUTPUT.PUT_LINE('Salary is too low.');
END;Blocs d'excepcions
Els blocs d'excepcions es poden utilitzar per capturar múltiples excepcions i gestionar-les de manera adequada. Cada excepció es maneja en una secció WHEN.
Exemple de bloc d'excepcions amb múltiples excepcions
DECLARE
v_emp_name VARCHAR2(50);
BEGIN
SELECT ename INTO v_emp_name
FROM emp
WHERE empno = 1234;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with the given ID.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('More than one employee found with the given ID.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred.');
END;Exercicis pràctics
Exercici 1: Gestió d'excepcions predefinides
Escriu un bloc PL/SQL que intenti dividir un nombre per zero i gestioni l'excepció ZERO_DIVIDE.
DECLARE
v_num1 NUMBER := 10;
v_num2 NUMBER := 0;
v_result NUMBER;
BEGIN
v_result := v_num1 / v_num2;
DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Error: Division by zero is not allowed.');
END;Exercici 2: Excepcions definides per l'usuari
Defineix una excepció per gestionar un salari invàlid (menor que 1000) i escriu un bloc PL/SQL que la utilitzi.
DECLARE
e_invalid_salary EXCEPTION;
v_salary NUMBER := 500;
BEGIN
IF v_salary < 1000 THEN
RAISE e_invalid_salary;
END IF;
DBMS_OUTPUT.PUT_LINE('Salary is valid.');
EXCEPTION
WHEN e_invalid_salary THEN
DBMS_OUTPUT.PUT_LINE('Error: Salary is too low.');
END;Resum
En aquesta secció, hem après com gestionar errors en PL/SQL utilitzant excepcions predefinides i definides per l'usuari. També hem vist com estructurar blocs d'excepcions per capturar i gestionar múltiples errors. La gestió d'excepcions és essencial per escriure codi robust i fiable, i és una habilitat clau per a qualsevol desenvolupador de PL/SQL.
Curs de PL/SQL
Mòdul 1: Introducció a PL/SQL
Mòdul 2: Fonaments de PL/SQL
- Estructura del bloc PL/SQL
- Variables i tipus de dades
- Estructures de control
- Cursors
- Gestió d'excepcions
