Først og fremmest skal du beslutte dig for:
- enten du vil have indsættelsen eller opdateringen til at mislykkes, når den udføres på et uønsket tidspunkt
- eller du ønsker, at indsættelsen eller opdateringen skal behandles, men med kolonnerne sat til null derefter.
Du kan ikke have begge dele.
Hvis du vil indstille kolonnerne til NULL, skal dette være en BEFORE INSERT/UPDATE trigger, så de ændrede kolonner bliver skrevet til tabellen. (I en AFTER INSERT/UPDATE-trigger vil indstilling af felterne til en eller anden værdi ikke have nogen effekt, fordi de ikke er skrevet.)
Derefter SET NEW.STAFFNO = NULL;
er ingen gyldig PL/SQL, det skal være :NEW.STAFFNO := NULL;
i stedet.
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;