Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Acionar definir valores de linha de inserção como nulo


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;