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