快速版本:我有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$)
现在,那就是华夫饼干...... 这就是我需要你的帮助:
有谁知道其中一个日志表(wwv_flow_activity_log1 $或wwv_flow_activity_log2 $)是否总是有最新的日志?是log1 $填满的情况,log2 $填充然后log1 $被log2 $覆盖,以便log2 $总是有最新的数据?或者他们都填满然后再填满?
有人可以建议我如何使用DW_Log_Temp标记记录填充DW_Log_Hist表吗?
概念上它会是这样的:
将所有内容从activity_log1 $和activity_log2 $插入dw_log_hist,其中time_stamp为> (dw_log_temp中记录的time_stamp)
对于这么长的帖子感到非常抱歉。
答案 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)
乌拉!当你看到简单的答案时,总觉得自己像个白痴......