■DBMS_METADATA.get_dll を利用してテーブルやインデックス作成用DDLを取得する際にコンポジットパーティションなどでパーティション数が多い場合などに出力結果が膨大になりすぎてまともに利用できず困っていたが、ちゃんと制御するためのSET_TRANSFORM_PARAMサブプログラムが用意されていたのでメモ
-- ■下記で作業セッションのみ DBMS_METADATA の出力設定を変更する -- インデント・改行を無効に EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',FALSE ); -- セグメント属性句を無効に EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE ); -- ストレージ句を無効に EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE ); -- 表領域の指定を無効に EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',FALSE ); -- パーティションの指定を無効に EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PARTITIONING',FALSE ); -- ■取得したいインデックスを指定 set line 256 set pages 1000 set long 9999999 col cr_ind for a256 SELECT DBMS_METADATA.get_ddl ('INDEX', index_name,'TEST_USER' ) as cr_ind FROM DBA_INDEXES WHERE TABLE_NAME = 'TEST_TBL';
-- ■出力結果サンプル CREATE UNIQUE INDEX "TEST_USER"."TEST_TBL_PK" ON "TEST_USER"."TEST_TBL" ("PK1", "PK2", "PK3") CREATE INDEX "TEST_USER"."TEST_TBL_IDX" ON "TEST_USER"."TEST_TBL" ("C01", "C02", "C03", "C04", "C05", "C06", "C07", "C08", "C09")