Sugeruję określenie wyzwalacza dla każdego wiersza. Uważam to za dużo łatwiejsze.
Możesz policzyć, aby sprawdzić, czy MovieStar.Name
wartość już istnieje, a następnie wstaw, jeśli nie; to jest podobne do podejścia, które masz powyżej. To się nie powiedzie, jeśli inny użytkownik wstawi movie star między momentem sprawdzenia a godziną wstawienia, ale prawdopodobnie wystarczy to do zadania klasowego. Istnieją akceptowane podejścia bezbłędne, ale być może nie omówiłeś ich jeszcze na zajęciach.
Spróbuj czegoś takiego; prawdopodobnie zawiera wszystko, co do tej pory omówiłeś na zajęciach:
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;