Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quel est un moyen efficace de suivre, d'identifier et de signaler chaque « message d'erreur » généré par votre application ?

Pour les erreurs générées par votre propre application, une solution courante consiste à disposer d'un tableau des messages d'erreur comme celui-ci :

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

Une entrée typique pourrait être :

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.'
       );

Ensuite, dans votre code, gérez les exceptions comme ceci :

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

Le paquet ferait quelque chose comme :

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;

L'utilisateur final verrait quelque chose comme :

ERROR 479: End date cannot be earlier than start date

Cela pourrait ensuite être recherché pour obtenir les détails de la cause et de l'action.

Une version plus avancée permettrait d'afficher des valeurs de données dans les messages, en utilisant des espaces réservés dans le texte d'erreur comme ceci :

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);