Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL触发器错误-触发器无效_Sql_Oracle_Triggers - Fatal编程技术网

SQL触发器错误-触发器无效

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

我使用的是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 
   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)但不太确定。