[分享]使用DBMS_METADATA.GET_DDL函数包获取一个对象的DDL脚本_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4791 | 回复: 0   主题: [分享]使用DBMS_METADATA.GET_DDL函数包获取一个对象的DDL脚本        下一篇 
guoqiang
注册用户
等级:上士
经验:252
发帖:26
精华:0
注册:2012-4-12
状态:离线
发送短消息息给guoqiang 加好友    发送短消息息给guoqiang 发消息
发表于: IP:您无权察看 2012-4-12 9:54:49 | [全部帖] [楼主帖] 楼主

使用DBMS_METADATA.GET_DDL函数包获取一个对象的DDL脚本,并且DDL脚本中不包含创建该DDL的用户信息
适用于:

数据库企业版,版本10gr1~11gr2.文档适用于任何操作系统平台

目标:

如何运用dbms_metadata.get_ddl方法获取创建表的DDL语句,但是在返回的DDL语句中不能指定创建该DDL脚本的用户

方法:
用dbms_metadata.add_transform方法的mofify模式,将句柄传递到存储过程

DBMS_METADATA.SET_REMAP_PARAM (
transform_handle IN NUMBER,
name IN VARCHAR2,
old_value IN VARCHAR2,
new_value IN VARCHAR2,
object_type IN VARCHAR2 DEFAULT NULL);


提供REMAP_SCHEMA作为名称的参数,OLD_VALUE作为用户对象的参数,NEW_VALUE作为一个空字符串参数。最后用DBMS_METADATA.ADD_TRANSFORM方法过滤对象,如下面的例子

set pages 1000
set long 1000
var h number
var ddl_handle number
var modify_handle number
exec :h := DBMS_METADATA.OPEN('TABLE')
exec :modify_handle := DBMS_METADATA.ADD_TRANSFORM(:h,'MODIFY')
exec DBMS_METADATA.SET_REMAP_PARAM(:modify_handle,'REMAP_SCHEMA','SCOTT','')
exec :ddl_handle := DBMS_METADATA.ADD_TRANSFORM(:h,'DDL')
exec DBMS_METADATA.SET_FILTER(:h, 'NAME','EMP')


代码执行成功后,执行select DBMS_METADATA.fetch_clob(:h) from dual;查询语句,将返回如下的查询结果:

CREATE TABLE "EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论