2011-12-11 139 views
0

我正在做一个如下所示的任务。Oracle触发器创建问题

在STAFF表上创建一个名为STAFF_TRIGGER的PL/SQL触发器。这个 触发器将在每次插入或更新后执行。 a.For插入, 这个触发器应该把新STAFF.STAFF_ID值,在 MOD_USER用户,并在MOD_TIMESTAMP系统日期记录在创建数据到STAFF_LOG的 。 B.FOR更新,该触发器应该把 以前的STAFF值转换成相应的STAFF_LOG列 以及记录MOD_USER和MOD_TIMESTAMP。

到目前为止,这是我所拥有的,我使用的是Oracle数据库快速版。

create trigger staff_trigger 
after insert or update on staff 
for each row 

begin 

if inserting then 
    insert into staff_log (staff_id, mod_user, mod_timestamp) 
    values(new.employee_id, new.last_name, sysdate); 
end if; 

if updating then 
    insert into staff_log (mod_user, mod_timestamp) 
    values(new.last_name, sysdate); 
end if; 

end; 

当我执行的代码我得到下面的错误。

ERROR at line 9: PL/SQL: SQL Statement ignored7. if inserting then 
8. insert into staff_log (staff_id, mod_user, mod_timestamp) 
9. values(new.employee_id, new.last_name, sysdate); 
10. end if; 

任何想法可能是什么原因?

+1

提示:当您在您的文章把代码,选择代码,然后单击看起来像'{}'按钮。这将格式化代码并使其更易于阅读。 –

回答

1

试试这个(:new而不是new

create trigger staff_trigger 
after insert or update on staff 
for each row 

begin 

if inserting then 
    insert into staff_log (staff_id, mod_user, mod_timestamp) 
    values(:new.employee_id, :new.last_name, sysdate); 
end if; 

if updating then 
    insert into staff_log (mod_user, mod_timestamp) 
    values(:new.last_name, sysdate); 
end if; 

end; 
+0

工作....非常感谢! – daniel

+0

@daniel欢迎您:-)请不要忘记,以纪念作为答案接受(见http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Yahia