用DBMS_METADATA获取对象的DDL脚本
目的:
文档的目的就是运用dbms_metadata函数生成对象的DDL脚本
适用范围和应用:
Oracle9和oracle9i
DBMS_METADATA函数包是一个强大的工具,可以获取用户完整定义对象信息。她能够使你获取一个对象所有定义的属性信息。对象以DDL脚本形式存在,并且可以用来重建。GET_DDL方法用来获取当前对象下所有表的DDL脚本,过滤嵌套表和溢出段。
The SET_TRANSFORM_PARAM这个参数用来过滤返回的DDL中storage信息。事后,这个参数在缓存级别会一直存在并且生效,直到重新设置成defaults才失效。
注意:你可能需要执行catmeta.sql去生成DBMS_METADATA这个函数包。运行的catmeta.sql脚本在$ORACLE_HOME/rdbms/admin目录下
例如你已经创建了下面的表
create table idx3_tab (
name varchar2(30),
id number,
addr varchar2(100),
phone varchar2(30)) tablespace users;
如果你想获取创建表的脚本,你可以执行select dbms_metadata.get_ddl('TABLE','IDX3_TAB') from dual; 进行查询,输出结果为
CREATE TABLE "SCOTT"."IDX3_TAB"
( "NAME" VARCHAR2(30),
"ID" NUMBER,
"ADDR" VARCHAR2(100),
"PHONE" VARCHAR2(30)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS"
如果你不想获取storage参数,你可以执行代码EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false); 接着执行 select dbms_metadata.get_ddl('TABLE','IDX3_TAB') from dual; 查询语句,返回的结果
CREATE TABLE "SCOTT"."IDX3_TAB"
( "NAME" VARCHAR2(30),
"ID" NUMBER,
"ADDR" VARCHAR2(100),
"PHONE" VARCHAR2(30)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING TABLESPACE "USERS"
中将不会包含storage参数信息