sql >> Databasteknik >  >> RDS >> Oracle

Undantagshantering i Procedur med kapslade funktioner i pl/sql

RAISE_APPLICATION_ERROR förfarande har en tredje parameter som styr om undantaget ersätter den aktuella undantagsstacken (standardbeteendet) eller lägger till den.

Så om du skickar det TRUE det kommer att visa båda meddelandena; i samtalet från din procedur:

...
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data',
  TRUE);
END;

ger dig utdata:

BEGIN
*
ERROR at line 1:
ORA-20101: Problem in loading Affected Circle data
ORA-06512: at "SRUSER.ADD_AFFECTEDCIRCLE", line 13
ORA-20102: Circle Code is wrong or not available
ORA-06512: at line 2

För att bara visa meddelandena och inte den andra stackinformationen måste du manipulera stacken. Den här artikeln berör hur man använder format_error_backtrace kod> för att extrahera informationen du är intresserad av, men tyvärr länken till BT paketet är döda. Lite av samma grund behandlas här . I huvudsak måste du analysera undantagssträngen i rader och bara visa de som börjar med ORA-20% , tror jag.

Men var försiktig med att förlora information som faktiskt kan vara viktig. I synnerhet skulle jag föreslå att du bara fäller de specifika felen du letar efter, inte OTHERS - lämna det ifred så att du kan hantera oväntade fel och inte dölja något viktigt.




  1. Hur man returnerar resultatet av många utvalda uttalanden som en anpassad tabell

  2. SQL konvertera 'DDMMYY' till datetime

  3. Gruppera poster från while loop | PHP

  4. Mysql jconnector tillbringar 50 % tid i com.myql.jdbc.utils.ReadAheadInputStream.fill()