oracle

SQLPLUSでDDL取得

各種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 )

おすすめはこちらです

テーブル用
ストアドパッケージ用
スポンサーリンク
コピペで使う