2013-12-19 137 views
1

快速版:我有4個表(TableA,TableB,TableC,TableD)在設計上是相同的。 TableC是一個完整的歷史表A & B.我想定期更新TableC與來自表A & B的新數據。表D包含最近從A/B轉移到C的行的副本。我需要從表A/B比TableD中的記錄更新。 有什麼建議嗎?創建流的歷史記錄_030100.wwv_flow_activity_log

長的版本:我試圖努力ETL(提取,轉換和加載)從幾個不同的表到一些其他表更快一些信息,更容易報告...有點像一個數據倉庫,但在同一個數據庫中(不要問)。

基本上我們想記錄和報告系統性能。 ORACLE有日誌,這表flows_030100.wwv_flow_activity_log1 $和$ flows_030100.wwv_flow_activity_log2 - 我相信,這些表都充滿每兩週或東西...

我創建了一個表中清除:

CREATE TABLE dw_log_hist AS 
SELECT * FROM flows_030100.wwv_flow_activity_log WHERE 1=0 

並填充當前信息:

INSERT INTO dw_log_hist 
SELECT * 
FROM flows_030100.wwv_flow_activity_log1$ 

INSERT INTO dw_log_hist 
SELECT * 
FROM flows_030100.wwv_flow_activity_log2$ 

然而,這些日誌文件會在APEX屏幕中記錄每次點擊。因此,它們不斷增長。

我想定期更新我的DW_Log_Hist表只有新的信息(我完全知道我的歷史表會長得可笑的大小,但我會在稍後處理)。

不幸的是,這些表沒有主鍵,所以我不得不創建另一個表來存儲標記的記錄,會告訴我我現在是複製了-_-

CREATE TABLE dw_log_temp AS 
SELECT * FROM flows_030100.wwv_flow_activity_log 
WHERE time_stamp = (SELECT MAX (time_stamp) 
         FROM flows_030100.wwv_flow_activity_log2$) 

THEN畢竟最新的日誌的華夫餅乾...... 這就是我需要您的幫助:

  1. 有誰知道日誌表中的一個(wwv_flow_activity_log1 $或wwv_flow_activity_log2 $)是否總是有最新的日誌?是log1 $填滿的情況,log2 $ fill然後log1 $被log2 $覆蓋,這樣log2 $總是有最新的數據?還是他們都填滿了,然後再填補?

  2. 任何人都可以建議如何使用DW_Log_Temp標記記錄填充DW_Log_Hist表嗎?

概念上,它會是這樣的:

插入到一切dw_log_hist從activity_log1 $和activity_log2 $其中TIME-STAMP是>(在dw_log_temp記錄的TIME-STAMP)

超級對不起,這樣的長的職位。

回答

0

得到了答案:-)

Reddit上的一個章節幫助我意識到我的過於複雜......

insert into dw_log_hist 
    select * 
    from flows_030100.wwv_flow_activity_log1$ 
    where time_stamp > (select max(time_stamp) 
          from dw_log_hist) 
union 
    select * 
    from flows_030100.wwv_flow_activity_log2$ 
    where time_stamp > (select max(time_stamp) 
          from dw_log_hist) 

萬歲!當你看到簡單的答案時總覺得自己像個白癡......