2

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

这是我的触发代码:

    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; 
4

2 回答 2

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;
于 2012-05-16T11:34:59.087 回答
1

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

insert into B (column1, column2) 
values (:new.tableA_col1,:new.tableA_col2)
于 2012-05-16T11:35:38.000 回答