Propagacion de excepciones en PL/SQL

     Una de las características más interesantes de la excepciones es la propagación de excepciones.

     Cuando se lanza una excepción, el control se transfiere hasta la sección EXCEPTION del bloque donde se ha producido la excepción. Entonces se busca un manejador válido de la excepción (WHEN <excepcion> THEN, WHEN OTHERS THEN) dentro del bloque actual.

    En el caso de que no se encuentre ningún manejador válida el control del programa se desplaza hasta el bloque EXCEPTION del bloque que ha realizado la llamada PL/SQL.

    Observemos el siguiente bloque de PL/SQL (Notese que se ha añadido una clausula WHERE 1=2 para provocar una excepcion NO_DATA_FOUND).


DECLARE
fecha DATE;
       FUNCTION fn_fecha RETURN DATE
       IS
         fecha DATE;
       BEGIN
            SELECT SYSDATE INTO fecha
            FROM DUAL
            WHERE 1=2;
            RETURN fecha;
       EXCEPTION
       WHEN ZERO_DIVIDE THEN
       dbms_output.put_line('EXCEPCION ZERO_DIVIDE CAPTURADA
EN fn_fecha');                
       END;
BEGIN
   fecha := fn_fecha();
   dbms_output.put_line('La fecha es '||TO_CHAR(fecha, 'DD/MM/YYYY'));
EXCEPTION 
    WHEN NO_DATA_FOUND THEN
    dbms_output.put_line('EXCEPCION NO_DATA_FOUND CAPTURADA EN
EL BLOQUE PRINCIPAL');
END;

    La excepcion NO_DATA_FOUND se produce durante la ejecución de la funcion fn_fecha, pero como no existe ningún manejador de la excepción en dicha funcion, la excepción se propaga hasta el bloque que ha realizado la llamada. En ese momento se captura la excepcion.

Propagacion de excepciones en PL/SQL
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Es fundador, diseñador y programador de www.devjoker.com.