DECLARE
dyn_sql VARCHAR2(2000);
-- KAYNAK TABLONUN BULUNDUGU SCHEMA
v_owner VARCHAR2(30) := 'HR';
-- kaynak tablonun adi.
v_table VARCHAR2(30) := 'BU_TABLODAN';
--partitionun tasinacagi (eklemenin yapilacigi partitionun oldugu) schema adi
v_dest_owner VARCHAR2(30) := 'SCOTT';
--insert yapilacak olan tablonun adi.
v_dest_table VARCHAR2(30) := 'BU_TABLOYA';
BEGIN
--database'deki butun partitionlar bizim tablomuza ait olan partitionlarin isimlerini çekiyoruz.
--burada her iki partition isimlerinin de ayni oldugu varsayiliyor.
--partition isimlerinin farkli oldugu durumlarda kodda düzenlemeye gitmek gerekebilir.
--all_tab_partitions da HIGH_VALUE üzerinde i?lem yap?labilir.
--high_value long b?r alan oldu?u için dönü?türme yapmak gerebilir.
FOR i IN (SELECT partition_name
FROM all_tab_partitions
WHERE table_owner = v_owner
AND table_name = v_table)
LOOP
dyn_sql := ' INSERT /*+ append */ INTO '
||v_dest_owner
||'.'
||v_dest_table
||' PARTITION ('
||i.partition_name
||')
SELECT /*+ parallel (aa,16) */ *
FROM '
||v_owner
||'.'
||v_table
||' partition ('
||i.partition_name
||') aa ';
dbms_output.Put_line(dyn_sql);
--EXECUTE IMMEDIATE dyn_sql;
COMMIT;
END LOOP;
END;
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment