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

Der Auslöser hat die Zeilenwerte zum Einfügen auf null gesetzt

Zuerst müssen Sie sich entscheiden:

  • entweder Sie möchten, dass das Einfügen oder Aktualisieren fehlschlägt, wenn es zu einem unerwünschten Zeitpunkt erfolgt
  • oder Sie möchten, dass die Einfügung oder Aktualisierung verarbeitet wird, aber dann mit auf null gesetzten Spalten.

Sie können nicht beides haben.

Falls Sie die Spalten auf NULL setzen möchten, sollte dies ein BEFORE sein INSERT/UPDATE-Trigger, damit die geänderten Spalten in die Tabelle geschrieben werden. (Bei einem AFTER INSERT/UPDATE-Trigger, der die Felder auf einen bestimmten Wert setzt, hätte dies keine Auswirkung, da sie nicht geschrieben werden.)

Dann SET NEW.STAFFNO = NULL; kein gültiges PL/SQL ist, müsste das :NEW.STAFFNO := NULL; sein stattdessen.

CREATE OR REPLACE TRIGGER hi
  BEFORE INSERT OR UPDATE OF class_time ON class
  FOR EACH ROW 
WHEN (new.class_time NOT BETWEEN '09:00' AND '18:00')
BEGIN 
  :new.staffno := null; 
  :new.class_day := null; 
  :new.class_type := null; 
  :new.roomnum := null;
END;