2013-12-19 51 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) 

万岁!当你看到简单的答案时总觉得自己像个白痴......