Oracle 10g。触发禁止在月份的最后一天删除或更新

时间:2014-04-29 15:14:33

标签: sql oracle

我有一张桌子' Flights'有字段(ID NUMBER,出发日期,等等)。

如何编写一个TRIGGER,禁止DELETION或UPDATING那些有“离开”的行。日期字段=月的最后一天。

这是我尝试过的,但我收到了错误。

CREATE OR REPLACE TRIGGER forbid_last_day_of_month
    BEFORE DELETE OR UPDATE ON flight
    FOR EACH ROW
    WHEN (departure = last_day(departure))
BEGIN
raise_application_error(-20001, 'No data change allowed on the last day of month!'); 
END;
/

但是我收到了这个错误:

ORA-04076: invalid NEW or OLD specification

1 个答案:

答案 0 :(得分:1)

:new仅用于插入更新触发器

为什么要使用触发器?

drop table t1;
create table t1 (
col1 date,
CHECK (last_day(col1) <> col1)
);
insert into t1 values (last_day(sysdate)-1);
insert into t1 values (last_day(sysdate));

另外,看看你从评论中的触发器到这个答案的一堆异常(一切看起来都很正常)。

以下是触发器的输出:

SQL Error: ORA-20001: No data change allowed on the last day of month
ORA-06512: at "DBO_QBMS.t1_TR", line 3
ORA-04088: error during execution of trigger 'myschema.t1_TR'