0

要求:使用 ETL 工具更新表 1,之后我需要使用基于表 1 的视图截断数据并将其插入表 2。有什么更好、更有效的方法?(不带 ETL 工具)

到目前为止我做了什么:

我创建了一个触发器,用于使用基于“Table1”的视图截断并插入另一个表“Table 2”

下面是代码:

    CREATE OR REPLACE TRIGGER My_Trigger
    AFTER INSERT ON Table1 
    DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
    execute immediate 'truncate table Table2';COMMIT;
    insert into Table2( X,Y,Z)
    select * from MY_VIEW;
    COMMIT;
    END;

现在的问题是 table1 中有多个插入,但触发器在第一次插入完成后触发。我尝试对每一行使用,但插入次数超过 70k,因此非常耗时。

请提出一种我可以执行上述工作的方法。

4

1 回答 1

1

这不是您应该对触发器执行的操作。在插入 table1 之前截断 table2 是一个更好的设计。

不要认为你需要它,但你可能想看看 dbms_scheduler,它是一个包,它提供了一组过程,允许你按特定顺序运行 PL/SQL 过程。

如果您真的想使用 after 语句触发器,您可以创建另一个表,用于标记该表今天已被截断。

于 2013-05-31T20:49:34.007 回答