Per gli errori generati dalla tua stessa applicazione, una soluzione comune è avere una tabella di messaggi di errore come questa:
create table errors
( error_no integer primary key
, error_text varchar2(200)
, error_cause varchar2(4000)
, error_action varchar2(4000)
);
Una voce tipica potrebbe essere:
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.'
);
Quindi nel tuo codice gestisci le eccezioni qualcosa del genere:
if p_start_date > p_end_date then
error_pkg.raise_error (479);
end if;
Il pacchetto farebbe qualcosa del tipo:
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'utente finale vedrebbe qualcosa del tipo:
ERROR 479: End date cannot be earlier than start date
Questo potrebbe quindi essere cercato per ottenere i dettagli della causa e dell'azione.
Una versione più avanzata consentirebbe di visualizzare i valori dei dati nei messaggi, utilizzando segnaposto nel testo di errore come questo:
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);