Jeg vil foreslå, at du specificerer udløseren for hver række. Jeg finder disse meget nemmere.
Du kan foretage en optælling for at se, om MovieStar.Name
værdi findes allerede, og indsæt derefter, hvis den ikke gør det; det svarer til den tilgang, du har ovenfor. Dette vil mislykkes, hvis en anden bruger indsætter filmstjernen mellem det tidspunkt, du tjekker, og det tidspunkt, du indsætter, men det er sandsynligvis godt nok til en klasseopgave. Der er accepterede tilgange uden fejl til dette, men du har muligvis ikke dækket dem i klassen endnu.
Prøv noget som dette; det inkorporerer sandsynligvis alt, hvad du har dækket i klassen indtil videre:
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;