¿Cómo Controlar los Errores de los Packages en Oracle?

Saber controlar eficientemente todos los errores que ocurran en tus procesos es una técnica muy importante que debes dominar ya que te permitirá detectar todos los problemas que presenten tus programas al momento de ser utilizados por los usuarios del sistema, esto también te permitirá resolver estos problemas y/o errores mucho mas rápido.

Existen errores de ejecución que son generados automáticamente por Oracle cuando ocurre una excepción no controlada por el proceso, veamos algunos ejemplos prácticos para entender mejor estos conceptos.

Ejemplo #1: Supongamos que tenemos un procedure donde se realiza una consulta a la base de datos pero no se encuentran datos y se genera un error.

Create o Replace Package Body Pkg_Controlar As

Procedure Prc_Nombre(pin_rut   in   t_empleado.rut%type, pst_nombre  out  t_empleado.nombre%type ) is

Begin

Select emp.nombre into pst_nombre from t_empleado where rut=pin_rut;

End Prc_Nombre;

End Pkg_Controlar;

En este ejemplo se está buscando el nombre del empleado, pero si como parámetro llega un rut que no existe en la tabla ocurrirá un error en tiempo de ejecución que terminará el proceso de forma abrupta, ya que no se está controlando el error.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Ahora veamos el mismo ejemplo pero controlando el error dentro del proceso.

Create o Replace Package Body Pkg_Controlar As

Procedure Prc_Nombre(pin_rut   in   t_empleado.rut%type, pst_nombre  out t_empleado.nombre%type, pin_cod_resultado out number, pst_des_resultado out varchar2 ) is

Begin

pin_cod_resultado:= 0;

pst_des_resultado:= ‘ ‘;

Begin

Select emp.nombre into lst_nombre from t_empleado emp where rut=pin_rut;

Exception

            When No_Data_Found Then

                  pst_Nombre:= ‘Empleado no existe’;

End;

Exception

      When Others Then

            pin_cod_resultado:= -1;

            pst_des_resultado:= ‘Error: ’||To_Char(Sqlcode)||’ – ‘||Sqlerrm;

End Prc_Nombre;

End Pkg_Controlar;

En este ejemplo si no se encuentra el rut en la tabla el proceso no se cae por que el error se controla con la cláusulaBegin – Exception que permite detectar y manejar todas las excepciones de un proceso. La palabra reservada de Oracle No_Data_Found  devuelve verdadero si la consulta SELECT no encuentra datos y se retorna un mensaje en la variable pst_nombre.

Además se agregó otra excepción a nivel del procedure la que permite controlar otros (Others) errores que ocurran dentro del proceso y se retorna en la variable pin_cod_resultado el valor -1 que indica que ocurrió un error, en la variable  pst_des_resultado se retorna el código del error ocurrido (Sqlcode) y la descripción del error (Sqlerrm).

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Function en Oracle, Packages en Oracle, Procedures en Oracle y etiquetada , , , , , . Guarda el enlace permanente.

2 respuestas a ¿Cómo Controlar los Errores de los Packages en Oracle?

  1. javier dijo:

    muy buen articulo, sencillo y conciso.
    estoy comenzando en este mundo de PL. y seguire tus articulos para mejorar el conocimiento.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s