PL / SQL触发器将值插入另一个表

时间:2014-05-25 23:16:08

标签: sql oracle plsql

我试图创建一个将值插入临时表的触发器,但我也希望它从我想要修改的实际表中删除这些值,以便更好地解释自己:

我创建了这个表

create table R2(a int, b date);

临时表与R2

基本相同
CREATE GLOBAL TEMPORARY TABLE R2TEMP
 AS SELECT * FROM R2;

如果我这样做:

INSERT INTO R2 VALUES (1,'09/05/1995');

我希望此触发器在R2TEMP中插入这些值,而不是将它们插入R2中(我使用了DELETE FROM R2但我想知道如何避免它)

CREATE OR REPLACE TRIGGER BLOCK_INSERT2
BEFORE INSERT ON R2
FOR EACH ROW

BEGIN


INSERT INTO R2TEMP(A,B)
SELECT * FROM R2;

DELETE FROM R2;
END;

我想知道如何将这些值插入到另一个表中,与引发触发器的表不同,我希望自己解释一下,谢谢你的时间

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找instead of触发器(文档here)。

很容易编码:

CREATE OR REPLACE TRIGGER BLOCK_INSERT2
INSTEAD OF INSERT ON R2
FOR EACH ROW
BEGIN
    INSERT INTO R2TEMP(A,B)
        SELECT A, B FROM R2;
END;

我建议您明确列出所有列,而不是使用select *