sql >> Base de Datos >  >> RDS >> Oracle

Creando un disparador que arroja una excepción al insertar

¿Desea generar una excepción (que evitaría que la inserción tenga éxito)? ¿O desea permitir que la inserción tenga éxito y escribir una cadena en dbms_output búfer que puede o no existir y puede o no mostrarse a un humano que ejecuta la inserción?

En cualquier caso, querrá que este sea un activador de nivel de fila, no un activador de nivel de declaración, por lo que deberá agregar el for each row cláusula.

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

Si desea generar una excepción

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 desea imprimir potencialmente la salida pero permitir el insert tener éxito

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

Por supuesto, en realidad, nunca usarías un gatillo para este tipo de cosas. En el mundo real, usaría una restricción.