まず最初に決めなければならないこと:
- どちらか 望ましくない時間に挿入または更新が行われたときに失敗するようにしたい
- または 挿入または更新を処理したいが、列を null に設定したい。
両方を持つことはできません。
列を NULL に設定する場合、これは BEFORE である必要があります INSERT/UPDATE トリガーなので、変更された列がテーブルに書き込まれます。 (AFTER INSERT/UPDATE トリガーでは、フィールドに何らかの値を設定しても、フィールドが書き込まれないため、何の効果もありません。)
次に SET NEW.STAFFNO = NULL;
は有効な PL/SQL ではありません。:NEW.STAFFNO := NULL;
である必要があります。
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;