sql >> Database >  >> RDS >> Oracle

Vraag Oracle om details van ORA-codefouten

Het is niet toegankelijk vanuit SQL, maar binnen PL/SQL kunt u de SQLERRM gebruiken functie.

Bijvoorbeeld

SQL> ed
Wrote file afiedt.buf

  1  begin
  2    dbms_output.put_line( sqlerrm(0) );
  3    dbms_output.put_line( sqlerrm(-1041) );
  4* end;
SQL> /
ORA-0000: normal, successful completion
ORA-01041: internal error. hostdef extension doesn't exist

PL/SQL procedure successfully completed.

Je zou natuurlijk een ora_code_desc . kunnen bouwen functie die een string innam, de eerste drie tekens verwijderde, het resulterende getal doorgaf aan SQLERRM , en het resultaat geretourneerd

SQL> ed
Wrote file afiedt.buf

  1  create or replace function ora_code_desc( p_code in varchar2 )
  2    return varchar2
  3  is
  4    l_str varchar2(1000);
  5  begin
  6    l_str := sqlerrm( substr(p_code, 4 ) );
  7    return l_str;
  8* end;
SQL> /

Function created.

SQL> select ora_code_desc( 'ORA-00000' ) from dual;

ORA_CODE_DESC('ORA-00000')
--------------------------------------------------------------------------------
ORA-0000: normal, successful completion

Oracle levert ook een hulpprogramma op Unix-platforms oerr dat geeft meer details, met name de oorzaak en actie waarnaar u op zoek bent. Als je die gegevens ook echt wilt, kun je een Java-opgeslagen procedure schrijven die een besturingssysteemshell aanriep, een oerr uitvoerde commando, en het resultaat geretourneerd. Dat zou je meer gegevens opleveren, maar zou natuurlijk veel complexer zijn.



  1. Standaardwaarde invoegen wanneer null wordt ingevoegd

  2. Splits string op spatie en karakter als scheidingsteken in Oracle met regexp_substr

  3. ORACLE TRIGGER INVOEREN IN ... (SELECT * ...)

  4. Uitvoeringsvolgorde in MySQL