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

Inserción/actualización del activador de Oracle

Sugeriría especificar el disparador para cada fila. Encuentro esto mucho más fácil.

Puedes hacer un conteo para ver si MovieStar.Name el valor ya existe y luego inserte si no existe; eso es similar al enfoque que tienes arriba. Esto fallará si otro usuario inserta la estrella de cine entre el momento en que verifica y el momento en que inserta, pero probablemente sea lo suficientemente bueno para una tarea de clase. Hay enfoques aceptados que no fallan para esto, pero es posible que aún no los hayas cubierto en clase.

Prueba algo como esto; probablemente incorpore todo lo que has cubierto en clase hasta ahora:

CREATE OR REPLACE TRIGGER TestTrig
AFTER UPDATE OR INSERT ON STARSIN
FOR EACH ROW
DECLARE
  movieStarCount NUMBER;
BEGIN
  SELECT COUNT(*) INTO movieStarCount
    FROM MovieStar
    WHERE Name = :NEW.StarName;
  IF movieStarCount = 0 THEN
    INSERT INTO MovieStar (Name) VALUES (:NEW.StarName);
  END IF;
END;