(背景:我們正在運行使用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語法不起作用:-( –