Navrhoval bych specifikovat spouštěcí palbu pro každý řádek. Zdá se mi to mnohem jednodušší.
Můžete spočítat, zda MovieStar.Name
hodnota již existuje a pokud neexistuje, vložte ji; to je podobné přístupu, který máte výše. To se nezdaří, pokud jiný uživatel vloží filmovou hvězdu mezi čas, který zkontrolujete, a čas, který vložíte, ale pravděpodobně je to dost dobré pro zadání třídy. Existují akceptované přístupy bez selhání, ale možná jste je ještě neprobrali ve třídě.
Zkuste něco takového; pravděpodobně zahrnuje vše, co jste ve třídě doposud probrali:
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;