【问题标题】:PL/SQL trigger to insert values to another tablePL/SQL 触发器将值插入另一个表
【发布时间】:2014-05-25 23:16:08
【问题描述】:

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

我已经创建了这个表

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;

我想知道如何将这些值插入到另一个表中,与导致触发器的表不同,我希望我自己解释一下,感谢您抽出宝贵时间

【问题讨论】:

  • 创建一个名为 R2REAL 的表。使 R2 成为 R2REAL 上的视图,而不是表。在 R2(视图)上创建一个 INSTEAD OF INSERT 触发器。分享和享受。

标签: sql oracle plsql


【解决方案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 *

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多