Antes de tudo você tem que decidir:
- qualquer um você deseja que a inserção ou atualização falhe quando estiver sendo feita em um momento indesejado
- ou você deseja que a inserção ou atualização seja processada, mas com as colunas definidas como nulas.
Você não pode ter os dois.
Caso você queira definir as colunas como NULL, deve ser um ANTES Gatilho INSERT/UPDATE, para que as colunas alteradas sejam gravadas na tabela. (Em um gatilho AFTER INSERT/UPDATE, definir os campos para algum valor não teria nenhum efeito, porque eles não são gravados.)
Então
SET NEW.STAFFNO = NULL;
não há PL/SQL válido, que teria que ser :NEW.STAFFNO := NULL;
em vez de. 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;