Jag skulle föreslå att du anger utlösande brand för varje rad. Jag tycker att dessa är mycket enklare.
Du kan räkna för att se om MovieStar.Name
värdet finns redan och infoga sedan om det inte gör det; det liknar tillvägagångssättet du har ovan. Detta kommer att misslyckas om en annan användare infogar filmstjärnan mellan den tid du kontrollerar och den tid du infogar, men det är förmodligen tillräckligt bra för en klassuppgift. Det finns accepterade metoder utan misslyckande för detta, men du kanske inte har täckt dem i klassen ännu.
Prova något sånt här; den innehåller förmodligen allt du har tagit upp i klassen hittills:
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;