sql >> Base de Datos >  >> RDS >> Oracle

Trigger establece insertar valores de fila en nulo

En primer lugar tienes que decidir:

  • cualquiera desea que la inserción o actualización falle cuando se realiza en un momento no deseado
  • o desea que se procese la inserción o la actualización, pero con las columnas establecidas en nulo en ese momento.

No puedes tener ambos.

En caso de que desee establecer las columnas en NULL, esto debería ser un ANTES Desencadenador INSERT/UPDATE, por lo que las columnas modificadas se escriben en la tabla. (En un activador DESPUÉS DE INSERTAR/ACTUALIZAR, establecer los campos en algún valor no tendría ningún efecto, ya que no están escritos).

Entonces SET NEW.STAFFNO = NULL; no es un PL/SQL válido, tendría que ser :NEW.STAFFNO := NULL; en su lugar.

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;