所以我正在尝试编写一个触发器,当某个东西插入到数据库中时,如果它超过特定时间,则将行值设置为null
CREATE OR REPLACE TRIGGER hi
AFTER INSERT OR UPDATE OF CLASS_TIME ON class
FOR EACH ROW
BEGIN
IF (:NEW.CLASS_TIME < '09:00' )
OR (:NEW.CLASS_TIME > '18:00' )
THEN
RAISE_APPLICATION_ERROR(-20000, 'Due to low attendance no class cannot be scheduled at that time');
SET NEW.STAFFNO = NULL;
SET NEW.CLASS_DAY = NULL;
SET NEW.CLASS_TYPE = NULL;
SET NEW.ROOMNUM = NULL;
END IF;
END;
我在网上找到的所有内容都表明我得到的是正确的,但我在STAFFNO上得到了错误。提前感谢任何意见。
答案 0 :(得分:1)
首先你必须决定:
你不能同时拥有两者。
如果要将列设置为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;