0
create or replace trigger "STUDENT_PERSONAL_DETAIL_T1" 
AFTER insert or update or delete on "STUDENT_PERSONAL_DETAIL" 
for each row 
begin 
  insert into fa1 (s_id,name,class,sec) 
  select reg_no,name,class,sec 
  from inserted 
end;

这是使用Oracle xe 触发器创建界面创建的触发器。

它创建时没有错误,但是当在表上调用插入时会显示错误 trigger failed -ORA-04098 is invalid and failed re-validation

指导和建议会有很大帮助。

4

2 回答 2

3

你应该使用:

REFERENCING new AS new
...
BEGIN
     INSERT INTO fa1(s_id, name, class, sec)
          VALUES (:new.reg_no, :new.name, :new.class, :new.sec);
...
于 2012-10-02T15:48:14.853 回答
0

看,这个select语句是无效的,因为没有这样的表inserted

select reg_no,name,class,sec 
from inserted 

编辑如果您想将插入的值记录到表 fa1 中,您可以执行类似的操作,如果您在表中有以下列STUDENT_PERSONAL_DETAILreg_no,name,class,sec

create or replace trigger "STUDENT_PERSONAL_DETAIL_T1" 
AFTER insert on "STUDENT_PERSONAL_DETAIL" 
for each row 
begin 
  insert into fa1 (s_id,name,class,sec) 
  values (:new.reg_no, :new.name, :new.class, :new.sec)
end;

注意子句AFTER insert on "STUDENT_PERSONAL_DETAIL"。我没有or update or delete确保这只会为新插入的记录触发。(因为您尝试从“插入”表中进行选择,所以我得出结论,这就是您想要做的)

于 2012-10-02T15:45:02.467 回答