OracleのDDLコマンドを自動生成できる
Oracle データベースでは、既存オブジェクト再作成用の SQL (DDL) を
作成するファンクションが提供されている。
実はコレ、用途によっては利用価値が高いので、目から鱗状態の人も少なくないはず。
作成するには、DBMS_METADATA.GET_DDL ファンクションを使用する。
既存オブジェクトの Create文が欲しいとき
テーブルやビューなどのオブジェクトから定義を出力する DBMS_METADATA.GET_DDL。
既存オブジェクト再作成 SQL を出力できるのは、とっても便利だ。
出力フォーマットは CLOB のため、set pages と set long の設定が必要。
SQL コマンド
select dbms_metadata.get_ddl('(1)','(2)','(3)') from dual;
(1) オブジェクト種類:TABLESPACE、TABLE、INDEX、VIEW、SYNONYM、PACKAGE、PROCEDURE など
(2) オブジェクト名:対象のオブジェクト名を指定
(3) スキーマ名:省略時は現在のスキーマとなる
例:SYSTEM 表領域の DDL 出力
SQL> set long 10000
SQL> select dbms_metadata.get_ddl('TABLESPACE','SYSTEM') from dual;
  CREATE TABLESPACE "SYSTEM" DATAFILE
  '/share/oradata/ORCL/system01.dbf' SIZE 1048576000
  AUTOEXTEND ON NEXT 104857600 MAXSIZE 32767M
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS  SEGMENT SPACE MANAGEMENT MANUAL
例:HOGE スキーマの TEST テーブル定義出力
SQL> set long 10000
SQL> set pages 0
SQL> select dbms_metadata.get_ddl('TABLE','TEST','HOGE') from dual;
  CREATE TABLE "HOGE"."TEST"
   (    "COL1" NUMBER,
        "COL2" CHAR(10),
        "COL3" DATE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TESTTBS"
このスクリプトを控えておけば、オブジェクトの再作成が容易になるので、
是非覚えておくべき Tips のひとつ。

