sql >> Base de Datos >  >> RDS >> Oracle

¿Cuál es una forma efectiva de rastrear, identificar y reportar cada 'mensaje de error' generado por su aplicación?

Para los errores generados por su propia aplicación, una solución común es tener una tabla de mensajes de error como esta:

create table errors
    ( error_no integer primary key
    , error_text varchar2(200)
    , error_cause varchar2(4000)
    , error_action varchar2(4000)
    );

Una entrada típica podría ser:

insert into errors (error_no, error_text, error_cause, error_action)
values (479, 'End date cannot be earlier than start date',
        'A start date and an end date were entered where the end date was before the start date, which is not allowed.',
        'Correct the start and end dates and retry.'
       );

Luego, en su código, maneje las excepciones, algo como esto:

if p_start_date > p_end_date then
    error_pkg.raise_error (479);
end if;

El paquete haría algo como:

procedure raise_error (p_error_no integer)
is
    l_text errors.error_text%type;
begin
    select error_text into l_text
    from   errors
    where  error_no = p_error_no;
    raise_application_error(-20001, l_text);
end;

El usuario final vería algo como:

ERROR 479: End date cannot be earlier than start date

Esto podría consultarse para obtener los detalles de la causa y la acción.

Una versión más avanzada permitiría mostrar valores de datos en los mensajes, utilizando marcadores de posición en el texto de error como este:

insert into errors (error_no, error_text, error_cause, error_action)
values (456, 'Invalid action code: [1]',
        'An invalid action was specified', 'Correct the action code and retry.'
       );

error_pkg.raise_error (456, p_act_code);