Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Einfügen/Aktualisieren von Oracle-Triggern

Ich würde vorschlagen, das Triggerfeuer für jede Zeile anzugeben. Ich finde diese viel einfacher.

Sie können zählen, ob der MovieStar.Name Wert existiert bereits und dann einfügen, falls nicht; das ist ähnlich wie der Ansatz, den Sie oben haben. Dies schlägt fehl, wenn ein anderer Benutzer den Filmstar zwischen der Zeit, die Sie überprüfen, und der Zeit, die Sie einfügen, einfügt, aber es ist wahrscheinlich gut genug für eine Klassenaufgabe. Dafür gibt es anerkannte sichere Ansätze, aber Sie haben sie möglicherweise noch nicht im Unterricht behandelt.

Versuchen Sie so etwas; es enthält wahrscheinlich alles, was Sie bisher im Unterricht behandelt haben:

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;