Add new comment

Generating lots of DDL with DBMS_METADATA...

After using many different tools to generate DDL I usually end up back at DBMS_METADATA. DBMS_METADATA is an Oracle supplied package that became available with Oracle 9.

DBMS_METADATA is an API that can be used to generate the DDL of most any object in an Oracle database.

It is most handy for getting Table or Index DDL but there is a complete list of objects that DBMS_METADATA handles here.

Table Example
Log into a schema and run the following to generate DDL for all indexes in the schema:

set pagesize 0
set long 2000000000
spool CreateTables.sql
SELECT dbms_metadata.get_ddl('TABLE',table_name) || ';' 
FROM USER_TABLES 
ORDER BY TABLE_NAME;
spool off

Indexes example
Log into a schema and run the following to generate DDL for all indexes in the schema:

set pagesize 0
set long 2000000000
spool CreateIndexes.sql
SELECT dbms_metadata.get_ddl('INDEX',index_name) || ';' 
FROM user_indexes 
ORDER BY TABLE_NAME, INDEX_NAME;
spool off

What's Next?

DBMS_METADATA also has a transformation interface so DDL can be massaged before it is generated. Example transforms include turning on/off the storage clause, tablespace clause, and other

DBMS_METADATA also has helper functions that allow you to generate DDL of dependent objects and grants. See documentation for DBMS_METADATA.GET_DEPENDENT_DDL and DBMS_METADATA.GET_GRANTED_DDL.

-- Dave