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

Creazione di un trigger che genera un'eccezione all'inserimento

Vuoi sollevare un'eccezione (che impedirebbe la riuscita dell'inserimento)? Oppure vuoi consentire all'inserimento di avere successo e scrivere una stringa in dbms_output buffer che può esistere o meno e può essere mostrato o meno a un essere umano che esegue l'inserto?

In entrambi i casi, vorrai che questo sia un trigger a livello di riga, non un trigger a livello di istruzione, quindi dovrai aggiungere il for each row clausola.

CREATE OR REPLACE TRIGGER person_id_trigg
  AFTER INSERT
  ON person
  FOR EACH ROW

Se vuoi sollevare un'eccezione

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 
                             'The new ID value must have a length of 11' );
  END IF;
END;

Se desideri stampare potenzialmente l'output ma consenti insert per avere successo

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    dbms_output.put_line( 'The new ID value must have a length of 11' );
  END IF;
END;

Ovviamente, in realtà, non useresti mai un trigger per questo genere di cose. Nel mondo reale, useresti un vincolo.