2014-10-03 61 views

回答

1

對於所有的UPDATEDELETE交易,請使用MERGE聲明。

並且,爲了將所有DELETED行記錄到行中,執行BEFORE DELETE trigger。例如,

CREATE [ OR REPLACE ] TRIGGER trigger_name 
BEFORE DELETE 
    ON table_name 
    [ FOR EACH ROW ] 

DECLARE 
    -- variable declarations 

BEGIN 
    -- trigger code 

EXCEPTION 
    WHEN ... 
    -- exception handling 

END; 

在觸發器中添加所有必需的邏輯,以將刪除的記錄插入另一個表中。

而且,如果啓用了FINE GRAINED AUDITING,則根本不必使用觸發器。

編輯關於MERGE正如我上面建議:

UPDATE目標表匹配源表和DELETE不匹配記錄的記錄,你需要MERGE。例如:

MERGE INTO destination d 
    USING source s 
    ON (s.col1 = d.col1) 
    WHEN MATCHED THEN 
    UPDATE SET d.col2 = some_value 
    DELETE WHERE d.col3 = some_value; 

而且,有這些deleted記錄是inserted到另一個表,這是一個TRIGGER行動。

+0

感謝您的編輯。不知道我的鍵盤和顯示器顯示器有什麼問題。 – 2014-10-03 17:11:10

+0

我不明白爲什麼'MERGE'應該用來代替'INSERT','UPDATE'和'DELETE'? – 2014-10-03 20:19:52

+0

我的理解是,OP想要對UPDATE目標表中的匹配源表的記錄和DELETE匹配的記錄進行匹配。並且,要將這些刪除的記錄插入到另一個表中。所以,前一部分是'MERGE',帶有'UPDATE'和'DELETE'操作。後者是一個'TRIGGER'動作。 – 2014-10-04 07:06:57

相關問題