在Oracle中创建备份表触发器

时间:2012-05-16 11:22:26

标签: oracle plsql

我有一个表A,它由一个应用程序不断更新(插入语句)。我想创建另一个表B,它只包含表A的几列。为此,我想到创建一个在表A上插入后触发的触发器,但我不知道如何在触发器中编写insert语句。我不是数据库专家,所以可能是我遗漏了一些简单的东西。请帮忙。

这是我的触发器代码:

    CREATE OR REPLACE TRIGGER "MSG_INSERT_TRIGGER" 

AFTER
insert on "ACTIVEMQ_MSGS"

DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
begin
execute immediate 'truncate table MSG_BACKUP';
insert into MSG_BACKUP select * from ACTIVEMQ_MSGS;
COMMIT;
end; 

2 个答案:

答案 0 :(得分:3)

这似乎不太好主意:每次将新记录插入表A时,从表B中删除所有内容并复制表A中的所有记录。一旦有很多记录,这将是一个巨大的性能问题表A.

在表A的所需列上创建视图是否足够?

如果没有,也就是说,你仍然希望将所有插入“记录”到另一个表中,那么你就去了。 (我想你要复制以下字段:f1,f2,f3)

CREATE OR REPLACE TRIGGER TR_AI_ACTIVEMQ_MSGS
AFTER INSERT ON ACTIVEMQ_MSGS
FOR EACH ROW
BEGIN
  INSERT INTO MSG_BACKUP (f1, f2, f3)
  VALUES (:new.f1, :new.f2, :new.f3);            
END TR_AI_ACTIVEMQ_MSGS;

答案 1 :(得分:1)

在Oracle触发器中,记录值在de:new伪记录中可用。您的insert语句可能如下所示:

insert into B (column1, column2) 
values (:new.tableA_col1,:new.tableA_col2)