创建streams_030100.wwv_flow_activity_log的历史记录

时间:2013-12-19 07:50:13

标签: sql oracle logging oracle-apex data-warehouse

快速版本:我有4个表(TableA,TableB,TableC,TableD)在设计上相同。 TableC是TableA& amp;的完整历史。 B.我想用TableA& amp;中的新数据定期更新TableC。 B. TableD包含最近从A / B转移到C的行的副本。我需要从TablesA / B中选择比TableD中的记录更新的所有记录。 有什么建议吗?

长版本:我正在尝试将ETL(提取,转换,加载)从一些不同的表格中的一些信息转换为其他表格,以便更快,更轻松地报告...有点像数据仓库,但在同一个数据库内(不要问)。

基本上我们想要记录和报告系统性能。 ORACLE在表flow_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$)

现在,那就是华夫饼干...... 这就是我需要你的帮助

  1. 有谁知道其中一个日志表(wwv_flow_activity_log1 $或wwv_flow_activity_log2 $)是否总是有最新的日志?是log1 $填满的情况,log2 $填充然后log1 $被log2 $覆盖,以便log2 $总是有最新的数据?或者他们都填满然后再填满?

  2. 有人可以建议我如何使用DW_Log_Temp标记记录填充DW_Log_Hist表吗?

  3. 概念上它会是这样的:

    将所有内容从activity_log1 $和activity_log2 $插入dw_log_hist,其中time_stamp为> (dw_log_temp中记录的time_stamp)

    对于这么长的帖子感到非常抱歉。

1 个答案:

答案 0 :(得分: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)

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