【发布时间】:2015-08-06 17:40:16
【问题描述】:
我有以下触发器:
create or replace trigger CHILD_DOB_TRIGGER
before insert on CHILDREN
for each row
begin
if :NEW.CHILD_DOB > sysdate then
raise_application_error(-20001, 'CHILD_DOB must be greater than current date');
end if;
end;
/
但如果我尝试插入:
INSERT INTO CHILDREN
VALUES ((TO_DATE('2020/05/03', 'yyyy/mm/dd')));
我收到以下错误:
SQL Error: ORA-20001: CHILD_DOB must be greater than current date
ORA-06512: at "USER.CHILD_DOB_TRIGGER", line 3
ORA-04088: error during execution of trigger 'USER.CHILD_DOB_TRIGGER'
【问题讨论】:
-
嗯,你收到了一个错误,因为如果
CHILD_DOB列在未来,你的触发器会引发错误,并且你在未来插入一个值。 -
这里有什么问题?你得到了你想要的。
-
什么是 ORA-06512 和 ORA-04088 错误?我的触发器有问题吗?
-
另外,请不要使用触发器进行数据验证。请改用检查约束。
-
检查约束不适用于 SYSDATE,必须是触发器
标签: sql oracle oracle11g triggers