2013-05-31 122 views
0

要求:使用ETL工具更新表1,然後我需要使用基於表1的視圖截斷數據並將數據插入到表2中。執行此操作的更好,更有效的方法是什麼? (無ETL工具)Oracle觸發器

我迄今所做:

我已經創建其用於截斷和插入到另一個表「表2」使用其基於「表1」

的視圖的觸發

下面是代碼:

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; 

現在的問題是,有表1中,但觸發器觸發多個插入第一插入完成後。我嘗試使用每行,但插入的數量超過70K,所以它非常耗時。

請提出一個方法,我可以執行上述工作。

+2

是否所有插入都在一個事務中完成?如果是這樣,你可以在觸發器中創建一個dbms_job - 沒有自治事務並且沒有提交,依靠調用環境來提交事務,這也將導致作業啓動。 –

+0

從未在觸發器中使用過dbms_job,如果可能的話,你可以舉一個例子 – Stu

+2

因爲它是DDL,所以'truncate'將會提交,所以第一個是冗餘的。 –

回答

1

這不是你應該用觸發器做的事情。在插入table1之前截斷table2是一個更好的設計。

不要以爲你需要它,但你可能想看看dbms_scheduler,它是一個包,它提供了一組允許你以特定順序運行PL/SQL過程的過程。

如果您確實想要使用after語句觸發器,則可以創建另一個表,您可以使用該表來標記該表已被截斷爲今天。

+0

嗨Hol的, 那麼,什麼是做這個要求的最好辦法: 表1被更新後,我需要截斷,並使用了基於表1 視圖將數據插入到表2是他們的一個更好的,這樣做更有效嗎? – Stu