当您将数据从external table
数据库中导入时,您可以使用MERGE命令而不是insert
. 它让您不必担心重复数据
请参阅有关Oracle 合并命令的博客
更重要的是,我们可以将整个转换过程包装到这个Oracle MERGE命令中,引用外部表和一个命令中的表函数作为MERGED Oracle数据的来源。
alter session enable parallel dml;
merge /*+ parallel(contract_dim,10) append */
into contract_dim d
using TABLE(trx.go(
CURSOR(select /*+ parallel(contracts_file,10) full (contracts_file) */ *
from contracts_file ))) f
on d.contract_id = f.contract_id
when matched then
update set desc = f.desc,
init_val_loc_curr = f.init_val_loc_curr,
init_val_adj_amt = f.init_val_adj_amt
when not matched then
insert values ( f.contract_id,
f.desc,
f.init_val_loc_curr,
f.init_val_adj_amt);
所以我们有了它——我们复杂的 ETL 函数都包含在一个 Oracle MERGE 语句中。没有单独的 SQL*Loader 阶段,没有暂存表,并且全部通过管道传输并并行加载