PL/SQL - 创建一个触发器,用于防止更新/插入日期晚于当前日期的值



我需要找到一种方法来创建触发器,以防止在事故超过当前系统日期的日期/时间时插入或更新事故。

表代码:

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'

详细了解如何引发异常。

最新更新