我需要找到一种方法来创建触发器,以防止在事故超过当前系统日期的日期/时间时插入或更新事故。
表代码:
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 服务器上运行它。
你让它变得比它需要的要复杂一些。默认值是插入发生,因此您只需要确定何时不应该插入,并在该点引发异常,导致惰性被拒绝;像这样:
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'
详细了解如何引发异常。