Przede wszystkim musisz zdecydować:
- albo chcesz, aby wstawienie lub aktualizacja zakończyły się niepowodzeniem, gdy są wykonywane w niepożądanym czasie
- lub chcesz, aby wstawienie lub aktualizacja zostały przetworzone, ale z kolumnami ustawionymi na null.
Nie możesz mieć obu.
Jeśli chcesz ustawić kolumny na NULL, powinno to być PRZED Wyzwalacz INSERT/UPDATE, dzięki czemu zmienione kolumny zostaną zapisane w tabeli. (W wyzwalaczu AFTER INSERT/UPDATE ustawienie pól na jakąś wartość nie miałoby żadnego efektu, ponieważ nie zostały zapisane.)
Następnie SET NEW.STAFFNO = NULL;
nie jest prawidłowym PL/SQL, który musiałby być :NEW.STAFFNO := NULL;
zamiast tego.
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;