Schema export oracle,如何使用DBMS_METADATA(和SCHEMA_EXPORT)将Oracle SCHEMA作为DDL脚本

我在使用DBMS_METADATA为给定模式提取DDL时遇到麻烦,可能是因为我对它的理解是错误的.

这是我基本上做的:

set termout off

create table copy_dml_schema(c clob, i number);

declare

m number;

t number;

e number;

c clob;

i number := 0;

begin

e := dbms_metadata.session_transform;

dbms_metadata.set_transform_param (e, 'REF_CONSTRAINTS' , false );

dbms_metadata.set_transform_param (e, 'CONSTRAINTS_AS_ALTER', true );

dbms_metadata.set_transform_param (e, 'CONSTRAINTS' , true );

dbms_metadata.set_transform_param (e, 'FORCE' , true );

m := dbms_metadata.open('SCHEMA_EXPORT');

t := dbms_metadata.add_transform (m, 'DDL' );

dbms_metadata.set_transform_param (t, 'PRETTY' , true );

dbms_metadata.set_transform_param (t, 'SQLTERMINATOR' , true );

dbms_metadata.set_filter (m, 'SCHEMA' , 'XYZ');

dbms_metadata.set_filter (m, 'EXCLUDE_PATH_EXPR' , 'in (' ||

'''GRANT'' ,' ||

'''SYNONYM'' ,' ||

'''STATISTICS'' ,' ||

'''COMMENT'' ' ||

')');

loop

c := dbms_metadata.fetch_clob(m);

exit when c is null;

insert into copy_dml_schema values (c, i);

i := i+1;

end loop;

dbms_metadata.close(m);

end;

/

commit;

set pages 0

set trimspool on

set long 1000000

set lines 300

set longchunksize 300

spool c:\temp\the_schema.sql

select

c

from

copy_dml_schema

order

by i;

spool off

drop table copy_dml_schema;

set termout on

我的印象是这个方法会按照它们可以创建的顺序返回“CREATE TABLE”语句,也就是说,依赖表会在以后发出.

然而,事实证明,表的顺序是任意的,因为一些表是使用引用尚未发出的表的外键约束发出的.

为了“解决”这个问题,我将REF_CONSTRAINT和CONSTRAINTS_AS_ALTER分别设置为false和true,因为我认为这会让我的问题消失.事实并非如此.

那么,是否有解决我的问题的办法,还是有一个我忽略的设置?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值