2016-07-28 136 views
-4

我有下表,並且我希望在更新員工的狀態以「確認」時創建新表。新表必須包含具有該特定員工數據的所有列。Oracle:每次更新員工的狀態時都會創建一個新表

SQL> select * from employee; 

EMPID EMPNAME       SAL DOJ  STATUS 
----- ------------------------- ---------- --------- -------------------- 
    101 ALEX       10000 12-MAY-16 not_confirmed 
    102 PETER       20000 12-MAY-16 not_confirmed 
+2

這是一個很奇怪的解決方案...(即最有可能的錯誤解決方案。告訴我們這個問題,而不是,也許我們可以給你一個更好的選擇。) – jarlh

+2

你真的想在每次更新員工時創建一個新表嗎?更新員工時,在employee_history表中創建新行更有意義。 – OTTA

+1

這不是問題。 – sstan

回答

2

爲具有相同表格員工結構的員工創建新表,例如, employee_history。

創建觸發器後更新到歷史表 插入舊數值的代碼可以是:

CREATE OR REPLACE TRIGGER employee_after_update 
AFTER UPDATE ON employee 
FOR EACH ROW 
BEGIN 
IF(UPDATING('STATUS')) 
THEN 
    INSERT INTO employee_history(EMPID, EMPNAME, SAL , DOJ,STATUS) 
    VALUES(:old.EMPID, :old.EMPNAME , :old.SAL , :old.DOJ , :old.STATUS); 
END IF; 

END;

您可以添加額外的跟蹤場(如果需要),如UPDATE_DATE,USER_ID(誰做的改變,..)

+0

這應該是正確的答案,但從邏輯上講歷史不應包含':old'值? – SomeJavaGuy

+0

@凱文:謝謝。歷史記錄表通常涉及在源表中發生更改時對原始行進行完整複製。參考:http://database-programmer.blogspot.com.eg/2008/07/history-tables.html –

+0

再次感謝。好點,我將修改要使用的代碼:old –

相關問題