Prima di tutto devi decidere:
- o vuoi che l'inserimento o l'aggiornamento non vada a buon fine quando viene eseguito in un momento indesiderato
- o si desidera che l'inserimento o l'aggiornamento venga elaborato, ma con le colonne impostate su null.
Non puoi avere entrambi.
Nel caso in cui desideri impostare le colonne su NULL, questo dovrebbe essere un PRIMA INSERT/UPDATE trigger, in modo che le colonne modificate vengano scritte nella tabella. (In un trigger AFTER INSERT/UPDATE, l'impostazione dei campi su un valore non avrebbe alcun effetto, poiché non vengono scritti.)
Quindi SET NEW.STAFFNO = NULL;
non è un PL/SQL valido, dovrebbe essere :NEW.STAFFNO := NULL;
invece.
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;