我有一个表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;
答案 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)