定制导出oracle语句

来源:互联网 发布:手机晒密软件 编辑:程序博客网 时间:2024/04/25 17:16

今天想导出oracle的建表语句但是不需要乱七八糟的表空间附加存储选项,网上查询资料找到一种方法

 

登陆plsqldev命令行下输入

set serveroutput on

set linesize 999999

set feedback off

spool d:/c_sql.sql

--输出信息采用缩排或换行格式化
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', TRUE);
--确保每个语句都带分号
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
--关闭表索引、外键等关联(后面单独生成)
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'REF_CONSTRAINTS', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER', FALSE);
--关闭存储、表空间属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', FALSE);
--关闭创建表的PCTFREE、NOCOMPRESS等属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
--创建用户对象
SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
FROM USER_OBJECTS u
where U.OBJECT_TYPE IN ('TYPE','TABLE','VIEW','SEQUENCE','INDEX','PROCEDURE','FUNCTION','TRIGGER','PACKAGE BODY');

spool off

 

还有获取注释的语句

SELECT DBMS_LOB.substr(DBMS_METADATA.get_dependent_ddl ('COMMENT', table_name))
FROM (SELECT distinct table_name
FROM user_col_comments
WHERE comments IS NOT NULL);

另外导出注释ddl

-- 表

SELECT 'COMMENT ON TABLE ' ||TT.OWNER ||  '.' || TT.TABLE_NAME || ' IS ''' || TT.COMMENTS ||''';'
FROM ALL_TAB_COMMENTS TT WHERE  TT.OWNER='USERNAME' AND TT.COMMENTS IS NOT NULL;
-- 字段
SELECT 'COMMENT ON COLUMN ' || T.TABLE_NAME || '.' || T.COLUMN_NAME || ' IS ''' || T.COMMENTS ||''';'
 FROM ALL_COL_COMMENTS T WHERE T.OWNER='USERNAME';

当然官方文档依然是很好的参考

http://docs.oracle.com/cd/E11882_01/server.112/e22490/metadata_api.htm
http://docs.oracle.com/cd/E11882_01/server.112/e22490/metadata_api.htm#SUTIL1623

1 0
原创粉丝点击