在做迁移测试的时候我们需要只导出表结构,但是在Oracle中通过dbms_metadata包导出表结构会带有很多后缀,比如storage字句
导入其他库是非常不方便的,经过mos上面查阅,得到以下解决方法
execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘STORAGE’,false);
execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘TABLESPACE’,false);
execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SEGMENT_ATTRIBUTES’,false);
execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SQLTERMINATOR’,true);
select DBMS_METADATA.GET_DDL(‘TABLE’,‘DM_SANAN_BATCH’,‘CHIPDM’) from dual;
下面是批量导出某个用户下面所有的表结构
spool 1.sql
set serveroutput on;
declare
tab_owner varchar2(20):=‘CHIPDM’;
begin
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘STORAGE’,false);
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘TABLESPACE’,false);
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SEGMENT_ATTRIBUTES’,false);
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SQLTERMINATOR’,true);
for i in (select table_name from dba_tables where owner=tab_owner and table_name not in (‘MAP_DEFECT_CHIP_RAW’)) loop
dbms_output.put_line(DBMS_METADATA.GET_DDL(‘TABLE’,i.table_name,tab_owner));
end loop;
end;
/
spool off;
文章
阅读量
获赞