问题描述
我必须将一些对象从一个架构复制到同一数据库上的另一个,在其他java源中也是如此。dbms_metadata.get_ddl(object_type,object_name,schema_name) 返回ddl中的架构名称。因为我想在新架构上执行这个ddl,所以ddl中的旧架构名称对我的工作没有帮助。这里是一个在Oracle的虚拟机上测试数据库12.2的示例。
它的工作原理 (这意味着,它省略了ddl中的模式名称),但在java源代码的情况下:
它没有 (这意味着,它在ddl中添加了模式名称)!
我的数据库是11.2的。与我的表和java源相同的行为。
是虫子吗?有什么变通办法吗?
问候,贾塞克
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'EMIT_SCHEMA', false); select dbms_metadata.get_ddl('TABLE', 'DEPARTMENTS', 'HR') from dual;复制
它的工作原理 (这意味着,它省略了ddl中的模式名称),但在java源代码的情况下:
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'EMIT_SCHEMA', false); select dbms_metadata.get_ddl('JAVA_SOURCE', 'ZipManager', 'XDBPM') from dual;复制
它没有 (这意味着,它在ddl中添加了模式名称)!
我的数据库是11.2的。与我的表和java源相同的行为。
是虫子吗?有什么变通办法吗?
问候,贾塞克
专家解答
EMIT_SCHEMA是没有记录的。所以你不应该用这个。
放弃架构的正确方法是使用remp_schema,如MOS note 1067292.1所示:
可悲的是,Java source似乎存在一个错误,这意味着该模式被替换为空双引号 “”,而不是什么都没有:
放弃架构的正确方法是使用remp_schema,如MOS note 1067292.1所示:
set long 100 var h number var ddl_handle number var modify_handle number exec :h := DBMS_METADATA.OPEN('TABLE') exec dbms_metadata.set_filter(:h,'SCHEMA','HR'); exec :modify_handle := DBMS_METADATA.ADD_TRANSFORM(:h,'MODIFY') exec DBMS_METADATA.SET_REMAP_PARAM(:modify_handle,'REMAP_SCHEMA','HR','') exec :ddl_handle := DBMS_METADATA.ADD_TRANSFORM(:h,'DDL') exec DBMS_METADATA.SET_FILTER(:h, 'NAME','DEPARTMENTS') select DBMS_METADATA.fetch_clob(:h) from dual; DBMS_METADATA.FETCH_CLOB(:H) CREATE TABLE "DEPARTMENTS" ( "DEPARTMENT_ID" NUMBER(4,0), "DEPARTMENT_NAME" VARCHAR2(30) CO exec DBMS_METADATA.close(:h)复制
可悲的是,Java source似乎存在一个错误,这意味着该模式被替换为空双引号 “”,而不是什么都没有:
select user, name, line, text from user_source where type = 'JAVA SOURCE' and line <= 5; USER NAME LINE TEXT CHRIS TEST_ENCODING 1 import java.io.BufferedReader; CHRIS TEST_ENCODING 2 import java.io.ByteArrayInputStream; CHRIS TEST_ENCODING 3 import java.io.ByteArrayOutputStream; CHRIS TEST_ENCODING 4 import java.io.FileInputStream; CHRIS TEST_ENCODING 5 import java.io.InputStream; var h number var ddl_handle number var modify_handle number exec :h := DBMS_METADATA.OPEN('JAVA_SOURCE') exec :modify_handle := DBMS_METADATA.ADD_TRANSFORM(:h,'MODIFY') exec DBMS_METADATA.SET_REMAP_PARAM(:modify_handle,'REMAP_SCHEMA','CHRIS','') exec :ddl_handle := DBMS_METADATA.ADD_TRANSFORM(:h,'DDL') exec DBMS_METADATA.SET_FILTER(:h, 'NAME','TEST_ENCODING') select DBMS_METADATA.fetch_clob(:h) from dual; DBMS_METADATA.FETCH_CLOB(:H) CREATE JAVA SOURCE NAMED ""."TEST_ENCODING" AS import java.io.BufferedReader; import java.io.B exec DBMS_METADATA.close(:h)复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
504次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
484次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
405次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
398次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
374次阅读
2025-04-01 11:08:44
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
360次阅读
2025-04-18 14:18:38
Oracle 19c RAC更换IP实战,运维必看!
szrsu
343次阅读
2025-04-08 23:57:08
oracle定时任务常用攻略
virvle
316次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
315次阅读
2025-04-15 14:48:05
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
312次阅读
2025-03-24 09:42:53