Ik stel voor om de trigger fire voor elke rij te specificeren. Ik vind deze een stuk makkelijker.
Je kunt tellen om te zien of de MovieStar.Name
waarde bestaat al en voeg dan in als dat niet het geval is; dat is vergelijkbaar met de aanpak die je hierboven hebt. Dit zal mislukken als een andere gebruiker de filmster invoegt tussen de tijd dat je controleert en de tijd dat je invoegt, maar het is waarschijnlijk goed genoeg voor een klasopdracht. Er zijn geaccepteerde no-fail-benaderingen hiervoor, maar je hebt ze misschien nog niet in de klas behandeld.
Probeer zoiets als dit; het bevat waarschijnlijk alles wat je tot nu toe in de les hebt behandeld:
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;