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

Come sollevare un'eccezione all'interno di un trigger? C'è un modo per fare questo?

Ci sei quasi; hai bisogno di un blocco DECLARE in un trigger se vuoi dichiarare qualcosa; questo significa che la tua clausola WHEN è nel posto sbagliato.

create or replace trigger trig1
 before update
 of sal
 on emp
 for each row
 when (new.sal < old.sal)

declare    
   user_xcep EXCEPTION;
   PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
   raise user_xcep;
end;

SQL Violino

Alcuni punti:

  1. Mai cattura un'eccezione e quindi chiama DBMS_OUTPUT.PUT_LINE; è inutile. Qualcuno deve essere presente per visualizzare il risultato di ogni singolo record. Se non vuoi che accada qualcosa, solleva l'eccezione e poi catturala. Ho aggiunto un codice di errore alla tua eccezione in modo che tu possa intercettarlo al di fuori del trigger e gestirlo come desideri (non stampare nulla su stdout).
  2. È un punto minore ma ho aggiunto un piccolo spazio bianco; non tanto. Inizialmente non riuscivo a vedere dove fosse il problema con il tuo codice perché non ne avevi.
  3. Ti mancavano i punti e virgola dopo la dichiarazione di eccezione e RAISE.

Maggiori informazioni sulle eccezioni definite internamente nella documentazione