PLSQL触发器在插入后更新记录

时间:2015-10-24 13:48:31

标签: sql oracle plsql database-trigger

我正在尝试创建一个数据库触发器,如果​​类(输入的记录)要么启动,那么刚刚插入或更新到TUTPRAC表中的记录中的属性(STAFFNO,CLASS_DAY,CLASS_TYPE和ROOMNUM)会更改为NULL上午9点或下午6点后。

我想让这个触发器影响的表叫做:

TUTPRAC:CLASSID(PK),UNITCODE,STAFFNO,CLASSDAY,CLASSTIME,CLASSTYPE,ROOMNUM

我不确定我是否在正确的轨道上,我的代码到目前为止:

 CREATE TRIGGER CheckBeforeAfterHours
AFTER INSERT OR UPDATE OF CLASS_TIME ON TUTPRAC
FOR EACH ROW
BEGIN
  IF (:NEW.CLASS_TIME < 9:00 AND > 18:00) THEN
    UPDATE TUTPRAC SET STAFFNO = NULL, CLASS_DAY = NULL, CLASS_TYPE = NULL, ROOMNUM = NULL WHERE CLASS_TIME < 9:00 AND > 18:00;
  END IF;
END CheckBeforeAfterHours;

1 个答案:

答案 0 :(得分:0)

如果要更新正在插入/更新的记录,可以使用之前的触发器执行此操作:

CREATE TRIGGER CheckBeforeAfterHours
BEFORE INSERT OR UPDATE OF CLASS_TIME ON TUTPRAC
FOR EACH ROW
BEGIN
  IF (:NEW.CLASS_TIME < '09:00' AND > '18:00') THEN
     :NEW.STAFFNO := NULL;
     :NEW.CLASS_DAY := NULL;
     :NEW.CLASS_TYPE := NULL;
     :NEW.ROOMNUM := NULL;
  END IF;
END CheckBeforeAfterHours;

但是,我认为最好简单地在表格中为表格添加一个约束,因此当您尝试插入或更改为无效时间时会出现错误。