Thursday, July 23, 2009

PARTITION BAZLI KAYIT EKLEME

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;

No comments: