Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserção/atualização do gatilho Oracle


Eu sugiro especificar o disparo do gatilho para cada linha. Eu acho isso muito mais fácil.

Você pode fazer uma contagem para ver se o MovieStar.Name valor já existe e então insira se não existir; que é semelhante à abordagem que você tem acima. Isso falhará se outro usuário inserir a estrela de cinema entre o momento em que você verificar e o momento em que você inserir, mas provavelmente é bom o suficiente para uma tarefa de classe. Existem abordagens sem falhas aceitas para isso, mas talvez você ainda não as tenha abordado em sala de aula.

Tente algo assim; provavelmente incorpora tudo o que você abordou na aula até agora:
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;