比较 Oracle 上的日期和触发器 SQL
Compare Date with Trigger on Oracle SQL
我有一个 table 包含这些列:
- DateDebVal 日期
- DateFinVal DATE
- 是当前号码
我需要一个触发器来做这样的事情:
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;
我可以比较这些日期吗?使用触发器而不是视图或过程是个好主意吗?
日期绝对可以比较,但赋值是在 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
Sysdate 和 DateFinVal 是 DATE 类型,因此您可以比较它们。这取决于你需要这个触发器。
我有一个 table 包含这些列:
- DateDebVal 日期
- DateFinVal DATE
- 是当前号码
我需要一个触发器来做这样的事情:
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;
我可以比较这些日期吗?使用触发器而不是视图或过程是个好主意吗?
日期绝对可以比较,但赋值是在 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
Sysdate 和 DateFinVal 是 DATE 类型,因此您可以比较它们。这取决于你需要这个触发器。