2011-12-11 65 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