Oracle
 sql >> Database >  >> RDS >> Oracle

Gestione delle eccezioni in Procedure con funzioni nidificate in pl/sql

Il RAISE_APPLICATION_ERROR procedura ha un terzo parametro che controlla se l'eccezione sostituisce lo stack di eccezioni corrente (il comportamento predefinito) o se lo aggiunge.

Quindi se lo passi TRUE mostrerà entrambi i messaggi; nella chiamata dalla tua procedura:

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

ti dà l'output:

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

Per mostrare solo i messaggi e non le altre informazioni sullo stack è necessario manipolare lo stack. Questo articolo tocca come utilizzare format_error_backtrace per estrarre le informazioni che ti interessano, ma purtroppo il link al BT il pacco è morto. Alcuni dello stesso terreno è trattato qui . In sostanza devi analizzare la stringa di eccezione in righe e visualizzare solo quelle che iniziano con ORA-20% , penso.

Ma fai attenzione a non perdere informazioni che potrebbero essere effettivamente vitali. In particolare ti suggerirei di intercettare solo gli errori specifici che stai cercando, non OTHERS - lascia perdere così puoi gestire errori imprevisti e non nascondere qualcosa di importante.