yanjun
===========================================================
[Oracle]Get Object's DDL use DBMS_METADATA
===========================================================
从Oracle 9i 开始,Oracle通过一个新的包 DBMS_METADATA 提供了和对象创建层交互的API。利用这个包可以轻松的抽取相关对象的DDL。
DESCRIBE dbms_metadata --(output only shows the get_ddl function) 
  
FUNCTION GET_DDL RETURNS CLOB 
  Argument Name                  Type                    In/Out Default? 
  ------------------------------ ----------------------- ------ -------- 
  OBJECT_TYPE                    VARCHAR2                IN 
  NAME                           VARCHAR2                IN 
  SCHEMA                         VARCHAR2                IN     DEFAULT 
  VERSION                        VARCHAR2                IN     DEFAULT 
  MODEL                          VARCHAR2                IN     DEFAULT 
  TRANSFORM                      VARCHAR2                IN     DEFAULT 

如果要抽取一个表的DDL,可以简单的用:
SELECT DBMS_METADATA.get_ddl ('TABLE', 'FOO')
  FROM DUAL;
其中 FOO 是我们要获取DDL的表名字,默认是当前模式下(要注意对象名要用大写)。在SQL*Plus 中可能还要蚩猻erveroutput
SQL> SET serveroutput on long 999999
SQL> /

DBMS_METADATA.GET_DDL('TABLE','FOO')
-----------------------------------------------------------------------


  CREATE TABLE "SCOTT"."FOO"
   (    "DUMMY" VARCHAR2(1)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"
得到的 DDL有的时候似乎太详细了一些--很多Storage / FREELIST之类的语句可能并不是您想要的,可以在当前会话中提交如下语句:
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM( -
	DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
然后看看效果:
SQL> SELECT DBMS_METADATA.get_ddl ('TABLE', 'FOO')
  2    FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','FOO')
----------------------------------------------------------------------


  CREATE TABLE "SCOTT"."FOO"
   (    "DUMMY" VARCHAR2(1)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  TABLESPACE "USERS"

SQL>
抽取当前模式下所有表的DDL:
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
     FROM USER_ALL_TABLES u
     WHERE u.nested='NO' 
     AND (u.iot_type is null or u.iot_type='IOT');

其他问题

在Oracle 9.2.0.5.0 中,存在一个和DBMS_METADATA的相关的Bug。影响Linux x86平台的数据库软件。错误信息可能类似:

ERROR:
ORA-06502: PL/SQL: numeric or value error
ORA-31605: the following was returned from LpxXSLResetAllVars in routine
kuxslResetParams:
LPX-1: NULL pointer
ORA-22921: length of input buffer is smaller than amount requested
ORA-06512: at "SYS.UTL_XML", line 0
ORA-06512: at "SYS.DBMS_METADATA_INT", line 3320
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4148
ORA-06512: at "SYS.DBMS_METADATA", line 458
ORA-06512: at "SYS.DBMS_METADATA", line 615
ORA-06512: at "SYS.DBMS_METADATA", line 1221
ORA-06512: at line 1

如果遇到类似的错误,可能需要 http://metalink.oracle.com 站点下载编号为2736436的补丁。

参考信息

http://www.officemail.net.cn/article.asp?id=24
Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01

原文出处

http://www.dbanotes.net/Oracle/DBMS_METADATA_DDL.htm

http://www.officemail.net.cn/article.asp?id=24

yanjun0426 发表于:2004.12.15 13:48 ::分类: ( 初始分类 ) ::阅读:(102347次) :: 评论 (57)
谢谢老大,真是个好博客 [回复]

问题解决!!

泰哥 评论于: 2006.07.18 10:03
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Halo 评论于: 2007.11.23 05:22
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Diesel 评论于: 2007.11.23 07:18
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

July 评论于: 2007.11.23 08:56
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Halo 评论于: 2007.11.23 13:49
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.23 15:49
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.23 15:49
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.23 15:49
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Neo 评论于: 2007.11.23 17:07
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Neo 评论于: 2007.11.23 17:07
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Halo 评论于: 2007.11.23 18:53
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Bill 评论于: 2007.11.23 20:38
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Neo 评论于: 2007.11.23 22:25
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Kir 评论于: 2007.11.24 00:20
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Kir 评论于: 2007.11.24 00:22
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

July 评论于: 2007.11.24 02:17
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

July 评论于: 2007.11.24 04:15
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Arnie 评论于: 2007.11.24 06:13
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Neo 评论于: 2007.11.24 13:20
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Still 评论于: 2007.11.24 17:01
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Heel 评论于: 2007.11.24 20:46
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Arnie 评论于: 2007.11.24 22:45
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Diesel 评论于: 2007.11.25 00:33
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Heel 评论于: 2007.11.25 02:28
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

July 评论于: 2007.11.25 07:30
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Heel 评论于: 2007.11.25 19:02
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Heel 评论于: 2007.11.25 19:02
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Hero 评论于: 2007.11.25 23:23
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Hero 评论于: 2007.11.25 23:23
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Neo 评论于: 2007.11.26 01:52
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Halo 评论于: 2007.11.26 04:20
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Joe 评论于: 2007.11.26 06:54
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Diesel 评论于: 2007.11.26 09:08
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Still 评论于: 2007.11.26 16:33
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

July 评论于: 2007.11.26 18:52
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Dominic 评论于: 2007.11.26 21:13
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Neo 评论于: 2007.11.26 23:22
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Kir 评论于: 2007.11.27 01:53
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Kir 评论于: 2007.11.27 01:53
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Arnie 评论于: 2007.11.27 04:34
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Still 评论于: 2007.11.27 07:09
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

July 评论于: 2007.11.28 19:17
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Diesel 评论于: 2007.11.28 21:41
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Diesel 评论于: 2007.11.28 23:45
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.29 01:53
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.29 08:29
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.29 08:30
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Kir 评论于: 2007.11.29 12:49
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Kir 评论于: 2007.11.29 14:53
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Kir 评论于: 2007.11.29 14:53
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Bill 评论于: 2007.11.29 16:55
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Heel 评论于: 2007.11.29 21:06
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

Halo 评论于: 2007.11.29 23:00
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]


[URL=][/URL]

Heel 评论于: 2007.11.30 03:16
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

for erectile www.nationalwebmeds.com phentermine diet dysfunction, the for erectile phentermine diet dysfunction, the for erectile [url=www.nationalwebmeds.com]phentermine diet[/url] dysfunction, the for erectile [URL]www.nationalwebmeds.com[/URL] phentermine diet dysfunction, the compound seemed www.myinternetmedications.com phentermine no prescription to have compound seemed phentermine no prescription to have compound seemed [url=www.myinternetmedications.com]phentermine no prescription[/url] to have compound seemed [URL]www.myinternetmedications.com[/URL] phentermine no prescription to have a side www.discountmedsplace.com buy phentermine online effect which a side buy phentermine online effect which a side [url=www.discountmedsplace.com]buy phentermine online[/url] effect which a side [URL]www.discountmedsplace.com[/URL] buy phentermine online effect which could potentially www.onlinemedstoday.com buying viagra be worth could potentially buying viagra be worth could potentially [url=www.onlinemedstoday.com]buying viagra[/url] be worth could potentially [URL]www.onlinemedstoday.com[/URL] buying viagra be worth millions, if www.medspointstore.com cheapest viagra not billions millions, if cheapest viagra not billions millions, if [url=www.medspointstore.com]cheapest viagra[/url] not billions millions, if [URL]www.medspointstore.com[/URL] cheapest viagra not billions

Bojtqa Bojtqaevm 评论于: 2008.06.29 04:43
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

and vardenafil www.onlinemedscentral.com phentermine cod (Levitra

Usenqm Usenqmwta 评论于: 2008.06.29 05:29
re: [Oracle]Get Object's DDL use DBMS_METADATA [回复]

and vardenafil www.onlinemedscentral.com phentermine cod (Levitra

Hvfwor Hvfworxth 评论于: 2008.06.29 05:29

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)




切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
网站链接...