Oracle
 sql >> Base de données >  >> RDS >> Oracle

Le déclencheur définit les valeurs de ligne d'insertion sur null

Tout d'abord, vous devez décider :

  • soit vous voulez que l'insertion ou la mise à jour échoue lorsqu'elle est effectuée à un moment indésirable
  • ou vous voulez que l'insertion ou la mise à jour soit traitée, mais avec les colonnes définies sur null alors.

Vous ne pouvez pas avoir les deux.

Si vous souhaitez définir les colonnes sur NULL, cela devrait être un AVANT Déclencheur INSERT/UPDATE, afin que les colonnes modifiées soient écrites dans la table. (Dans un déclencheur AFTER INSERT/UPDATE, définir les champs sur une valeur n'aurait aucun effet, car ils ne sont pas écrits.)

Alors SET NEW.STAFFNO = NULL; n'est pas PL/SQL valide, cela devrait être :NEW.STAFFNO := NULL; à la place.

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;