注册
如何通过命令导出Oracle中建表语句
技术分享/ 文章详情 /

如何通过命令导出Oracle中建表语句

XGQ 2022/09/01 1874 12 0

在做迁移测试的时候我们需要只导出表结构,但是在Oracle中通过dbms_metadata包导出表结构会带有很多后缀,比如storage字句
image.png
导入其他库是非常不方便的,经过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;
image.png
下面是批量导出某个用户下面所有的表结构
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;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服