GET_DDL学习笔记

GET_DDL学习笔记


DBMS_METADATA.GET_DDL。是oracle9i的一个新特性,用来获取对象的原数据(以ddl语句的形式保存,可以用来创建对象)。


先看一下我做的应用,然后逐句分析。

将以下语句保存到e:/get_ddl.txt

-- author: qinhaichun@hotmail.com
-- date: 2007.05.13
set termout off;
set heading off;
set feedback off;
set pagesize 0;
SET LONG 90000;
spool e:/table_ddl.txt;
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', table_name) FROM user_tables;
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');
spool off;
set termout on;
set heading on;
set feedback on;


运行语句:

SQL> connect scott/tiger
已连接。
SQL> @e:/get_ddl.txt
SQL>host type e:/table_ddl.txt

  CREATE TABLE "SCOTT"."BONUS"                                                 
   (    "ENAME" VARCHAR2(10),                                                     
    "JOB" VARCHAR2(9),                                                            
    "SAL" NUMBER,                                                                 
    "COMM" NUMBER                                                                 
   ) ;                                                                         
                                                                               
  CREATE TABLE "SCOTT"."DEPT"                                                  
   (    "DEPTNO" NUMBER(2,0),                                                     
    "DNAME" VARCHAR2(14),                                                         
    "LOC" VARCHAR2(13),                                                           
     CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ENABLE                           
   ) ;    

   ......


这样就得到了table的定义,也可以修改语句用来生成索引,视图、过程、包的DDL语句。



下面解释一些重要的语句。

GET_DDL语法:
DBMS_METADATA.GET_DDL (                          
   object_type  IN VARCHAR2,
   name         IN VARCHAR2,
   schema       IN VARCHAR2 DEFAULT NULL,
   version      IN VARCHAR2 DEFAULT 'COMPATIBLE',
   model        IN VARCHAR2 DEFAULT 'ORACLE',
   transform    IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;

对象类型,和对象名称可以用select object_type, object_name from user_objects;来查看。


set termout off;
在spool生成的文件中,去掉命令显示。值得一提的是,这个命令必须放在文件里,然后执行文件才有效。直接SQL>set termout off;是无效的。

set heading off;
不显示字段的名称。

set feedback off;
不显示sql语句的结果。如:“已选择1行。”

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',false);
不显示表的存储信息。
   
SEGMENT_ATTRIBUTE参数
If TRUE, emit segment attributes (physical attributes, storage attributes, tablespace, logging). Defaults to TRUE.

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);
每个sql语句末尾追加结束符(; or /)

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');
恢复默认值。



如果想把一个用户的对象都导出来的话,上面做的还远远不够,需要研究一下SET_TRANSFORM_PARAM过程中的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值