SQL触发器错误-触发器无效
我使用的是pl\sql developer,我有一个带有数字(38)ID列的报表表 我想跟踪此表的所有更新,因此我创建了另一个如下表:SQL触发器错误-触发器无效,sql,oracle,triggers,Sql,Oracle,Triggers,我使用的是pl\sql developer,我有一个带有数字(38)ID列的报表表 我想跟踪此表的所有更新,因此我创建了另一个如下表: CREATE TABLE reportUpdate (report_id number(38), updatedate number(32)); 我创造了一个触发器: CREATE or REPLACE TRIGGER BeforeUpdateReport BEFORE UPDATE ON REPORT FOR EACH ROW Begin
CREATE TABLE reportUpdate (report_id number(38), updatedate number(32));
我创造了一个触发器:
CREATE or REPLACE TRIGGER BeforeUpdateReport
BEFORE
UPDATE ON REPORT
FOR EACH ROW
Begin
INSERT INTO reportUpdate
Values(old.ID,sysdate);
END;
当我运行它时,我得到一个错误,它说:trigger'SYSTEM.BEFOREUPDATEREPORT'无效并且重新验证失败
请有人帮忙您可以在看到带有警告的
编译后使用显示错误
,或者查询用户错误
视图以查看以后的错误
很明显,您没有在old
引用前面加冒号:
CREATE or REPLACE TRIGGER BeforeUpdateReport
BEFORE
UPDATE ON REPORT
FOR EACH ROW
Begin
INSERT INTO reportUpdate
Values(:old.ID,sysdate);
END;
/
最好在insert
语句中指定目标表字段:
INSERT INTO reportUpdate (report_id, updatedate)
Values(:old.ID,sysdate);
但是在表创建脚本中,您将update\u date
定义为number(32)
,这是没有意义的。正如@realspirituals所指出的,应该是:
CREATE TABLE reportUpdate (report_id number, updatedate date);
在创建触发器时,您很可能得到了一个带有警告的触发器。执行显示错误
,您将看到代码标签的错误在标签中,而不是在标题中。您在标题中的哪里看到标签?@Shmuli:编辑之前,您在标题中有“(Oracle)”。StackOverflow的共识是,标签不应该出现在标题中,而应该出现在标签字段中。您可能需要更改CREATE TABLE reportUpdate(report_id number(38),updatedate date)代码>但不太确定。