各種DDLを取得する際、metadata.get_ddlプロシージャを利用しますが、VARCHAR2の最大サイズを越える場合って出力できません。一般的なSQL実行ツール(A5:SQLやOsqlEditそして純正のSQL Developerなど)にもDDL出力機能を保持していますが、自分の好みのオプションを指定して出力するにはやはり自身で metadata.get_ddlプロシージャ を実行するしかありませんね。そんな時はSQL*PlusかSQLclが活躍します。
SET LINESIZE 1024 SET LONG 5000000 SET LONGCHUNKSIZE 5000000 SET PAGESIZE 0 SET HEADING OFF SET ECHO OFF
テーブルのDDL取得
select dbms_metadata.get_ddl('TABLE','EX01','SOONI') full_ddl from dual ;
好みに応じて以下オプション設定
-- --セグメント属性を省略したい場合 EXEC DBMS_METADATA.SET_TRANSFORM_PARAM (DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE)
-- PK情報はalter tableで表現するのでCREATE TABLE文からは外したい場合 EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', TRUE )
-- スキーマ名を省略したい場合 EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', TRUE )
--DDLの終わりにセミコロン EXEC DBMS_METADATA.SET_TRANSFORM_PARAM( DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE )
おすすめはこちらです