oracle sql语句自动转换/重写
我们有一个类似于ODS/MDM的参考数据数据库,但它是只读的。数据根据各种时间表从权威系统更新。每个表都维护历史数据-更新执行现有更新&插入新数据,删除执行现有更新 所有表格的格式如下:oracle sql语句自动转换/重写,sql,database,oracle,oracle11g,rewrite,Sql,Database,Oracle,Oracle11g,Rewrite,我们有一个类似于ODS/MDM的参考数据数据库,但它是只读的。数据根据各种时间表从权威系统更新。每个表都维护历史数据-更新执行现有更新&插入新数据,删除执行现有更新 所有表格的格式如下: table <name> surrogate key, business key(s), attribute(s), effective_start_date, effective_end_date 然后我需要将此语句转换为: select A.busines
table <name>
surrogate key,
business key(s),
attribute(s),
effective_start_date,
effective_end_date
然后我需要将此语句转换为:
select
A.busines_key,
B.business_key,
max( A.effective_start_date, B.effective_start_date ) effect_start_date,
min( A.effective_end_date, B.effective_end_date ) effective_end_date
from
A inner join B on (A.b_fk_col = B.business_key)
where
(A.effective_start_date between B.effective_start_date and B.effective_end_date
or
A.effective_end_date between B.effective_start_date and B.effective_end_date)
实际上,我需要能够做的是在连接之后立即向查询计划添加一个步骤:
e、 g
而不是原来的:
SELECT STATEMENT
MERGE JOIN CARTESIAN
BUFFER SORT
TABLE ACCESS BY INDEX ID A
INDEX FULL SCAN A_B_FK_IDX
BUFFER SORT
INDEX FULL SCAN B_PK_IDX
我可以得到如下结果:
SELECT STATEMENT
**** ADDED ****
EFFECTIVE RANGES // create/modify where & select clauses
TABLE ACCESS BY INDEX ID A // get the eff dates from A
TABLE ACCESS BY INDEX ID B // get the eff dates from B
****************
MERGE JOIN CARTESIAN
BUFFER SORT
TABLE ACCESS BY INDEX ID A
INDEX FULL SCAN A_B_FK_IDX
BUFFER SORT
INDEX FULL SCAN B_PK_IDX
我该怎么做呢?谢谢。我不太明白。您是否试图纠正性能问题?您似乎在描述分区。从这里开始:。这不是性能问题。它是关于确保针对历史数据的查询的数据完整性。例如,如果表A中有业务键“x”的记录,则需要动态SQL和/或ref游标。
SELECT STATEMENT
**** ADDED ****
EFFECTIVE RANGES // create/modify where & select clauses
TABLE ACCESS BY INDEX ID A // get the eff dates from A
TABLE ACCESS BY INDEX ID B // get the eff dates from B
****************
MERGE JOIN CARTESIAN
BUFFER SORT
TABLE ACCESS BY INDEX ID A
INDEX FULL SCAN A_B_FK_IDX
BUFFER SORT
INDEX FULL SCAN B_PK_IDX