Oracle
 sql >> Base de données >  >> RDS >> Oracle

Création d'un déclencheur qui lève une exception lors de l'insertion

Souhaitez-vous lever une exception (ce qui empêcherait l'insert de réussir) ? Ou voulez-vous autoriser l'insertion à réussir et écrire une chaîne dans dbms_output tampon qui peut ou non exister et qui peut ou non être montré à un humain exécutant l'insertion ?

Dans les deux cas, vous voudrez qu'il s'agisse d'un déclencheur au niveau de la ligne, et non d'un déclencheur au niveau de l'instruction, vous devrez donc ajouter le for each row clause.

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

Si vous souhaitez lever une exception

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

Si vous souhaitez potentiellement imprimer la sortie mais autoriser le insert réussir

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

Bien sûr, en réalité, vous n'utiliseriez jamais un déclencheur pour ce genre de chose. Dans le monde réel, vous utiliseriez une contrainte.