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

  1. Excepcions predefinides: PL/SQL proporciona un conjunt d'excepcions predefinides per a errors comuns.
  2. Excepcions definides per l'usuari: Els desenvolupadors poden definir les seves pròpies excepcions per manejar errors específics de l'aplicació.
  3. 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:

BEGIN
    -- Codi executat
EXCEPTION
    WHEN <excepció> THEN
        -- Codi per gestionar l'excepció
END;

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.

© Copyright 2024. Tots els drets reservats