dbms_metadata.get_ddl()用于获取对象的DDL,其具体用法如下。
注意:在sqlplus里,为了更好的展示DDL,需要设置如下参数:
set line 200
set pagesize 0
set long 99999
set feedback off
set echo off
1)获得表、索引、视图、存储过程、函数的DDL
select dbms_metadata.get_ddl(\'TABLE\',\'TABLE_NAME\',\'TABLE_OWNER\') from dual;
select dbms_metadata.get_ddl(\'INDEX\',\'INDEX_NAME\',\'INDEX_OWNER\') from dual;
select dbms_metadata.get_ddl(\'VIEW\',\'VIEW_NAME\',\'VIEW_OWNER\') from dual;
select dbms_metadata.get_ddl(\'PROCEDURE\',\'PROCEDURE_NAME\',\'PROCEDURE_OWNER\') from dual;
select dbms_metadata.get_ddl(\'FUNCTION\',\'FUNCTION_NAME\',\'FUNCTION_OWNER\') from dual;
下面这个脚本用于获得某个schema下所有的表、索引、视图、存储过程、函数的DDL
set pagesize 0
set long 90000
set feedback off
set echo off
spool schema_ddl.sql
SELECT DBMS_METADATA.GET_DDL(\'TABLE\',u.table_name,u.owner) FROM DBA_TABLES u;
SELECT DBMS_METADATA.GET_DDL(\'VIEW\',u.view_name,u.owner) FROM DBA_VIEWS u;
SELECT DBMS_METADATA.GET_DDL(\'INDEX\',u.index_name,u.owner) FROM DBA_INDEXES u;
select dbms_metadata.get_ddl(\'PROCEDURE\',u.object_name, u.owner,) from dba_objects u where u.object_type = \'PROCEDURE\';
select dbms_metadata.get_ddl(\'FUNCTION\',u.object_name, u.owner,) from dba_objects u where u.object_type = \'FUNCTION\';
spool off;
2)获得表空间的DDL
获得单个表空间的DDL:
select dbms_metadata.get_ddl(\'TABLESPACE\',\'TBS_NAME\') from dual;
获得所有表空间的DDL:
SELECT DBMS_METADATA.GET_DDL(\'TABLESPACE\', TS.tablespace_name)
FROM DBA_TABLESPACES TS;
3)获得用户的DDL
获得单个用户的DDL:
select dbms_metadata.get_ddl(\'USER\',\'EPAY_USER\') from dual;
获得所有用户的DDL:
SELECT DBMS_METADATA.GET_DDL(\'USER\',U.username)
FROM DBA_USERS U;