我有一个带有这些列的表:
我需要有一个执行以下操作的触发器:
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;
我可以比较那些日期吗?使用触发器而不是视图或过程是个好主意吗?
答案 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类型的,因此您可以将它们进行比较。这取决于您需要什么触发器。