2014-10-03 33 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

相关问题