Generate the DDL of entire schema objects with DBMS_METADATA package

Generate the DDL of entire schema objects with DBMS_METADATA package

We will use the DBA_OBJECTS table for specify the parameter input to get all the DDL of all objects present in the schema.

Following script will give you the ddl of object present in the Schema.


SPOOL E:\DDL.SQL
set pagesize 0
set long 90000
set feedback off
set echo off
set heading off
set lines 100

exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',true);
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

select dbms_metadata.GET_DDL(u.object_type,u.object_name,u.owner) from
dba_objects u
where owner = 'Schema_name';
SPOOL OFF

Note:
1. You can also disabled storage clause in defination of Oracle by executing following statement before generated DDLs

exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

2. Enable the SQL Terminator after each object syntax completed.

exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',true);

Example:
Showing the two object present in the list

SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> set heading off
SQL> set lines 100
SQL>
SQL> exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',true);
SQL> exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
SQL>
SQL> select dbms_metadata.GET_DDL(u.object_type,u.object_name,u.owner) from
  2  dba_objects u
  3  where owner = 'TEST';

  CREATE TABLE "TEST"."TESTPRIMARY"
   (    "ID" NUMBER,
        "NAME" VARCHAR2(10),
         PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS" ;


  CREATE TABLE "TEST"."TESTING"
   (    "ID" NUMBER,
        "NAME" VARCHAR2(100)
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS" ;


  CREATE UNIQUE INDEX "TEST"."SYS_C008201" ON "TEST"."TESTPRIMARY" ("ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  TABLESPACE "USERS" ;

This entry was posted in Oracle on by .
Unknown's avatar

About SandeepSingh

Hi, I am working in IT industry with having more than 15 year of experience, worked as an Oracle DBA with a Company and handling different databases like Oracle, SQL Server , DB2 etc Worked as a Development and Database Administrator.

Leave a Reply