我需要找到一种方法来创建一个触发器,以防止在事故发生时间超过当前系统日期的情况下插入或更新事故。
表格代码:
create table Accident
(Report_nr varchar2(4),
Accident_date date,
Location varchar2(20),
primary key (Report_nr));
我的尝试(显然不完整)与伪代码
CREATE OR REPLACE TRIGGER trigger1
BEFORE INSERT OR UPDATE ON accident
FOR EACH ROW
DECLARE
cur_date DATE := SYSDATE;
e EXCEPTION;
BEGIN
IF :new.accident_date <= cur_date THEN
[allow insertion/update]
ELSE
[dont allow]
END IF;
END;
我可能不会近距离接触,说实话这不是我的强项。任何帮助或指导将不胜感激。我在Oracle服务器上运行它。
答案 0 :(得分:1)
你使它变得比它需要的复杂一点。默认情况下,插入发生,因此您只需要确定何时不应该,并在该点抛出异常导致惰性被拒绝;类似的东西:
CREATE OR REPLACE TRIGGER trigger1
BEFORE INSERT OR UPDATE ON accident
FOR EACH ROW
BEGIN
IF :new.accident_date > SYSDATE THEN
RAISE_APPLICATION_ERROR(-20001, 'Accident date cannot be in the future');
END IF;
END;
/
今天的日期有效:
insert into accident values ('0001', date '2017-11-15', 'X');
1 row inserted.
明天没有:
insert into accident values ('0002', date '2017-11-16', 'Y');
Error starting at line : 18 in command -
insert into accident values ('0002', date '2017-11-16', 'Y')
Error report -
ORA-20001: Accident date cannot be in the future
ORA-06512: at "MY_SCHEMA.TRIGGER1", line 3
ORA-04088: error during execution of trigger 'MY_SCHEMA.TRIGGER1'