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

Evitar activación de inserción

Tuve una conversación con un profesor universitario que enseñaba PL/SQL después de una presentación en una conferencia. Mi charla fue sobre buenas prácticas de PL/SQL; una de mis diapositivas simplemente decía "No use disparadores". El profesor me dijo que encuentra ese consejo difícil de conciliar con las necesidades del plan de estudios. Tienen que enseñar a sus alumnos toda la sintaxis, pero admitió que a menudo establecen tareas que demandan soluciones que no usaríamos cuando escribimos software profesionalmente.

Esta es una pregunta así. El enfoque correcto es usar una restricción de verificación, como muestra la respuesta de Gordon . Las restricciones son más eficientes y también idiomáticas. Pero tu maestro quiere que escribas un disparador, así que aquí está tu código, corregido.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Puntos a tener en cuenta:

  1. CREAR O REEMPLAZAR significa que podemos cambiar el código de activación sin una instrucción DROP preliminar.
  2. BEGIN y END bloques de marco de código, como cuerpos desencadenantes.
  3. Los condicionales estáticos se enmarcan con las palabras clave IF ... END IF; WHEN es para salir de construcciones de bucle.
  4. Valores de columna de la tabla de referencia con las palabras clave :NUEVO (y :ANTERIOR) - tenga en cuenta los dos puntos.
  5. Utilice RAISE_APPLICATION_ERROR para lanzar una excepción; el número de error debe estar en el rango -20999 a -20000 que Oracle reserva para las excepciones definidas por el usuario.
  6. Haga que su mensaje de error sea significativo:dígales a sus usuarios lo que hicieron mal en lugar de hacer que lo adivinen.
  7. Aprenda a usar la sangría para que su código sea legible. Tus futuros compañeros de trabajo te lo agradecerán.