sql >> Databasteknik >  >> RDS >> Oracle

Vad är ett effektivt sätt att spåra, identifiera och rapportera varje "felmeddelande" som din ansökan tar upp?

För fel som uppstår av din egen applikation är en vanlig lösning att ha en tabell med felmeddelanden som detta:

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

En typisk post kan vara:

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

Sedan hanterar du undantag i din kod ungefär så här:

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

Paketet skulle göra något i stil med:

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;

Slutanvändaren skulle se något i stil med:

ERROR 479: End date cannot be earlier than start date

Detta kan sedan slås upp för att få information om orsak och åtgärd.

En mer avancerad version skulle tillåta att datavärden visas i meddelandena, med hjälp av platshållare i feltexten så här:

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


  1. Hitta refererade enheter i SQL Server:sys.dm_sql_referenced_entities

  2. Ansluter till Vertica i IRI Workbench

  3. Hur ansluter jag till MySQL på Amazon EC2 från Linux / Mac?

  4. Hur man ändrar mysql root-lösenordet