Extract DDL for Oracle Objects
This guide shows how to extract the CREATE statements (DDL) for common Oracle objects such as TABLE
, VIEW
, PROCEDURE
, FUNCTION
, PACKAGE
, TRIGGER
, DATABASE LINK
, INDEX
, SEQUENCE
, SYNONYM
, JOB
, LOB
, and MATERIALIZED VIEW
, with proper formatting using built-in Oracle packages.
✅ DDL for Any Object Using DBMS_METADATA.GET_DDL
🔄 Replace
'HR'
and'TABLE_NAME'
with your schema and object name.
SET LONG 100000;
SET PAGESIZE 0;
SET LINESIZE 200;
SET FEEDBACK OFF;
SET ECHO OFF;
SELECT DBMS_METADATA.GET_DDL('TABLE', 'TABLE_NAME', 'HR') FROM DUAL;
📌 Note: You can change 'TABLE'
to any of the following:
'VIEW'
'PROCEDURE'
'FUNCTION'
'PACKAGE'
'PACKAGE BODY'
'TRIGGER'
'DATABASE LINK'
'INDEX'
'SEQUENCE'
'SYNONYM'
'MATERIALIZED VIEW'
✅ DDL for JOBs (DBMS_JOB)
Oracle doesn’t support direct DDL via DBMS_METADATA
for jobs. Use this query to inspect scheduled jobs.
SELECT * FROM DBA_JOBS WHERE SCHEMA_USER = 'HR';
📌 Tip: For DBMS_SCHEDULER jobs, use:
SELECT DBMS_METADATA.GET_DDL('PROCOBJ', 'JOB_NAME', 'HR') FROM DUAL;
✅ DDL for LOBs (Inside Tables)
LOBs are part of tables. Use this to extract LOB info as part of table DDL:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'TABLE_WITH_LOB', 'HR') FROM DUAL;
📌 Note: The output includes LOB STORAGE
, TABLESPACE
, and CHUNK
settings if they exist.
📤 Exporting All Object DDLs from a Schema
To export DDLs for all objects of a specific type:
SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner)
FROM dba_objects
WHERE owner = 'HR'
AND object_type IN (
'TABLE', 'VIEW', 'PROCEDURE', 'FUNCTION', 'PACKAGE',
'TRIGGER', 'DATABASE LINK', 'INDEX', 'SEQUENCE',
'SYNONYM', 'MATERIALIZED VIEW'
);
📌 Note: Filter by object_type
as needed. JOB
and LOB
need special handling.
🧾 Final Tip
- Always run this in SQL*Plus or SQL Developer for proper formatting.
- Use
SET LONG
to avoid truncated DDL output. - Wrap output in a spool file to save for backup or migration purposes.