在Oracle SQL上将日期与触发器进行比较

时间:2018-06-26 08:36:38

标签: sql oracle database-trigger

我有一个带有这些列的表:

  • DateDebVal DATE
  • DateFinVal DATE
  • 当前为NUMBER

我需要有一个执行以下操作的触发器:

CREATE TRIGGER check_date
AFTER INSERT OR UPDATE ON tablename
FOR EACH ROW
BEGIN
        IF sysdate < DateFinVal
             set isCurrent = 1
        ELSE
             set isCurrent = 0
END;

我可以比较那些日期吗?使用触发器而不是视图或过程是个好主意吗?

2 个答案:

答案 0 :(得分:3)

可以绝对地比较日期,但是分配是在PL / SQL中使用:=完成的(而不是set

如果要更改新插入的行的值,则必须使用BEFORE触发器:

CREATE TRIGGER check_date
BEFORE INSERT OR UPDATE ON tablename
FOR EACH ROW
BEGIN
  IF sysdate < :new.datefinval
    :new.iscurrent := 1;
  ELSE
    :new.iscurrent := 0;
  END IF;
END;
/

在线示例:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=796347f1b5811448dddf2d0a532c2c2c

答案 1 :(得分:0)

Sysdate和DateFinVal是DATE类型的,因此您可以将它们进行比较。这取决于您需要什么触发器。