前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用dbms_metadata生成建表语句(r2笔记97天)

使用dbms_metadata生成建表语句(r2笔记97天)

作者头像
jeanron100
发布2018-03-14 17:10:19
4280
发布2018-03-14 17:10:19
举报

有时候在工作中,可以使用exp/imp得到表的创建语句。 如果想得到关于table,index,constraint的语句,可以考虑使用dbms_metadata来实现。 我们可以使用如下的脚本来得到建表语句,对应的索引语句,和ref_constraint语句。 建表语句就不多说了,关于索引的部分,过滤了主键和唯一性索引的部分,这些语句会和建表语句中的constraint有一定的冲突,而foreign key的语句在建表语句中也不建议使用,这样会对其他表产生依赖,可以考虑单独生成这部分的语句,最后执行。 所以整个脚本会分为3个部分,建表语句,创建索引的语句和ref_constraint的部分。 sqlplus -s n1/n1 <<EOF SET SERVEROUTPUT ON; SET LINESIZE 500; SET FEEDBACK OFF; set long 99999999 ; SET PAGESIZE 1000 ; set head off; EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false); 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,'TABLESPACE',true); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',false); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'REF_CONSTRAINTS',false); spool image_copy_$1.sql select 'select DBMS_METADATA.GET_DDL('||chr(39)||'TABLE'||chr(39)||','||chr(39)||table_name||chr(39)||','||chr(39)||owner||chr(39)||') sql_text from dual; 'FROM all_tables where owner=sys_context('USERENV','current_user') and table_name =upper('$1'); spool off; col sql_text format a300 spool image_copy_$1.log @image_copy_$1.sql spool off

spool ref_constraint_$1.sql select 'select DBMS_METADATA.GET_DDL('||chr(39)||'REF_CONSTRAINT'||chr(39)||','||chr(39)||constraint_name||chr(39)||','||chr(39)||owner||chr(39)||') sql_text from dual; 'FROM all_constraints where owner=sys_context('USERENV','current_user') and table_name =upper('$1') and constraint_type='R'; spool off; col sql_text format a300 spool ref_constraint_$1.log @ref_constraint_$1.sql spool off spool index_$1.sql select 'select DBMS_METADATA.GET_DDL('||chr(39)||'INDEX'||chr(39)||','||chr(39)||index_name||chr(39)||','||chr(39)||owner||chr(39)||') sql_text from dual;'FROM all_indexes where owner=sys_context('USERENV','current_user') and table_name =upper('$1') and index_name in ( select index_name from user_indexes where table_name='$1' and index_name not in (select constraint_name from user_constraints where constraint_type in ('P','U' ) and UNIQUENESS='UNIQUE') union select index_name from user_indexes where table_name='$1' and index_name in (select constraint_name from user_constraints where constraint_type='C' ) and UNIQUENESS='NONUNIQUE' ); spool off; col sql_text format a300 spool index_$1.log @index_$1.sql spool off EOF

运行脚本得到一个简单的例子。 CREATE TABLE "N1"."PM9_CRDT_LMT_NOTIFICATION" ( "CYCLE_CODE" NUMBER(2,0) DEFAULT 0 CONSTRAINT "PM9CRDLT_CYCLE_CODE_NN" NOT NULL ENABLE, "CYCLE_MONTH" NUMBER(2,0) CONSTRAINT "PM9CRDLT_CYCLE_MONTH_NN" NOT NULL ENABLE, "SYS_CREATION_DATE" DATE CONSTRAINT "PM9CRDLT_SYS_CREATION_DATE_NN" NOT NULL ENABLE, "SYS_UPDATE_DATE" DATE, "OPERATOR_ID" NUMBER(9,0), "APPLICATION_ID" CHAR(6), "DL_SERVICE_CODE" CHAR(5), "DL_UPDATE_STAMP" NUMBER(4,0), "CYCLE_YEAR" NUMBER(4,0) CONSTRAINT "PM9CRDLT_CYCLE_YEAR_NN" NOT NULL ENABLE, "CUSTOMER_ID" NUMBER(9,0) CONSTRAINT "PM9CRDLT_CUSTOMER_ID_NN" NOT NULL ENABLE, "AGREEMENT_ID" NUMBER(9,0) CONSTRAINT "PM9CRDLT_AGREEMENT_ID_NN" NOT NULL ENABLE, "OFFER_INSTANCE" NUMBER(9,0) CONSTRAINT "PM9CRDLT_OFFER_INSTANCE_NN" NOT NULL ENABLE, "ITEM_ID" NUMBER(9,0) CONSTRAINT "PM9CRDLT_ITEM_ID_NN" NOT NULL ENABLE, "UNBILLED_UC_AMOUNT" NUMBER(11,4), "LAST_THRESHOLD" NUMBER(11,4), "LAST_ACTUAL_THRESHOLD" NUMBER(11,4), "CREDIT_LIMIT" NUMBER(11,4), "TOTAL_OBLIGATION" NUMBER(11,4), "HOLIDAY_IND" VARCHAR2(1), CONSTRAINT "PM9_CRDT_LMT_NOTIFICATION_PK" PRIMARY KEY ("CYCLE_CODE", "CYCLE_MONTH", "CYCLE_YEAR", "CUSTOMER_ID", "AGREEMENT_ID", "OFFER_INSTANCE", "ITEM_ID") ENABLE ) ;

可以看到得到的语句是期望之中的,如果有其他的索引信息,也都能得到相应的语句。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档