DBMS_METADATA获得DDL语句

At 2011-12-30

转载请注明文章转载自:Dbabc.Net [http://dbabc.net]
本文链接:http://dbabc.net/archives/2011/12/30/dbms_metadata-ddl.shtml

通过 DBMS_METADATA 可以获得 表,索引或者procedure的ddl语句。

The kind of object to be retrieved. This can be either a particular object type (such as a table, index, or procedure) or a heterogeneous collection of object types that form a logical unit (such as a database export or schema export).
DBMS_METADATA
The DBMS_METADATA package provides a way for you to retrieve metadata from the database dictionary as XML or creation DDL and to submit the XML to re-create the object.

官方说明:http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_metada.htm

以下是实际操作实例:

1、获得一个表的ddl语句:

SQL> SET SERVEROUTPUT ON
SQL> SET LINESIZE 1000
SQL> SET FEEDBACK OFF
SQL> set long 999999
SQL> SET PAGESIZE 1000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','DBABC') from dual;
DBMS_METADATA.GET_DDL('TABLE','DBABC')
--------------------------------------------------------------------------------

CREATE TABLE "SYS"."DBABC"
(    "DUMMY" VARCHAR2(1)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRA
NS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXE
XTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUP
S 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM"

经过验证其中的表名需要大写才可以,如果是小写的话会报错如下:

SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','dbabc') from dual;
ERROR:
ORA-31603: object "dbabc" of type TABLE not found in schema "SYS"
ORA-06512: at "SYS.DBMS_METADATA", line 1546
ORA-06512: at "SYS.DBMS_METADATA", line 1583
ORA-06512: at "SYS.DBMS_METADATA", line 1901
ORA-06512: at "SYS.DBMS_METADATA", line 2792
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

—去除storage等多余参数
2、获得某个用户下的所有表,索引,存储过程的ddl:

conn scott/triger
set pagesize 0
set long 90000
set feedback off
set echo off
spool scott_schema.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
      FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
      FROM USER_INDEXES u;
spool off;

3、获得索引创建用户的ddl语句

SELECT DBMS_METADATA.GET_DDL('USER',U.username) FROM DBA_USERS U;

4、获得所有表空间的ddl语句

SELECT DBMS_METADATA.GET_DDL('USER',U.username) * FROM DBA_USERS U

无觅相关文章插件,快速提升流量

Copyright © Dbabc.Net All Rights Reserved. 本站内容仅代表个人观点, 与其他任何组织或公司无关

-The End-
  • 暂无相关日志

发表评论


*

为你保密









Copyright © Dbabc.Net All Rights Reserved. 本站内容仅代表个人观点, 与其他任何组织或公司无关

Powered by Wordpress and Theme by WPYOU