(背景:我们正在运行使用Oracle Warehouse Builder构建的数据仓库最近,我们开始在等待锁定时获得大量“ORA-02049:分布式事务超时“错误,原因是我们并行运行多个ETL作业,并且这些作业中的每一个都将INSERT /*+APPEND PARALLEL*/
插入到暂存表中。该暂存表由源系统ID进行分区。)Oracle/OWB:在运行时指定用于INSERT的分区
I' d想知道是否可以在运行时指定INSERT的分区键。 假设我有一个表
create table tmp_loading_table (
etl_source_system_fk number not null enable,
object_id number not null enable,
object_name varchar2(30) not null enable
)
PARTITION BY LIST ("ETL_SOURCE_SYSTEM_FK")
(PARTITION "ESS1" VALUES (1),
PARTITION "ESS2" VALUES (2)
);
那么我可以插入使用
insert /*+ APPEND PARALLEL("TMP_LOADING_TABLE") */
into tmp_loading_table partition(ESS1) (
etl_source_system_fk, object_id, object_name)
(select 1 etl_source_system_fk, object_id, object_name from user_objects);
特定的分区,但是这需要我硬编码的分区名称。
由于我们的OWB映射是通用的(他们得到的源系统ID作为参数),我想在运行时提供的分区名称,像
insert /*+ APPEND PARALLEL("TMP_LOADING_TABLE") */
into tmp_loading_table partition(:partition_name) (
etl_source_system_fk, object_id, object_name)
(select 1 etl_source_system_fk, object_id, object_name from user_objects);
这可能吗?如果没有,是否有另一种方法可以通过Oracle Warehouse Builder实现这一点?
感谢您的答案 - 我只想使用动态SQL作为最后的手段,因为这将使OWB思路更复杂。令人遗憾的是PARTITION FOR语法不起作用:-( –