Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was ist ein effektiver Weg, um jede von Ihrer Anwendung ausgegebene „Fehlermeldung“ zu verfolgen, zu identifizieren und zu melden?

Für Fehler, die von Ihrer eigenen Anwendung ausgelöst werden, ist eine gängige Lösung eine Tabelle mit Fehlermeldungen wie diese:

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

Ein typischer Eintrag könnte sein:

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

Behandeln Sie dann in Ihrem Code Ausnahmen wie folgt:

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

Das Paket würde so etwas tun:

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;

Der Endbenutzer würde so etwas sehen wie:

ERROR 479: End date cannot be earlier than start date

Dies könnte dann nachgeschlagen werden, um die Ursache und die Aktionsdetails zu erhalten.

Eine fortgeschrittenere Version würde es ermöglichen, dass Datenwerte in den Nachrichten angezeigt werden, indem Platzhalter im Fehlertext wie folgt verwendet werden:

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