我有一张桌子' 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
答案 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'