Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Qual é uma maneira eficaz de rastrear, identificar e relatar todas as 'mensagens de erro' levantadas pelo seu aplicativo?


Para erros gerados por seu próprio aplicativo, uma solução comum é ter uma tabela de mensagens de erro como esta:
create table errors
    ( error_no integer primary key
    , error_text varchar2(200)
    , error_cause varchar2(4000)
    , error_action varchar2(4000)
    );

Uma entrada típica pode 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.'
       );

Então, em seu código, trate de exceções algo assim:
if p_start_date > p_end_date then
    error_pkg.raise_error (479);
end if;

O pacote faria 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;

O usuário final veria algo como:
ERROR 479: End date cannot be earlier than start date

Isso pode ser consultado para obter os detalhes da causa e da ação.

Uma versão mais avançada permitiria que os valores dos dados fossem exibidos nas mensagens, usando espaços reservados no texto do erro 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);