我有一个包含SQL代码的CLOB
列的表。现在我想将开发人员数据库中的内容转移到高效的数据库中。我使用以下脚本导出开发表的内容:
set long 100000
set lines 1000
spool d:\export.sql
select /*insert*/* from myTable;
spool off
但是,由于SQL代码中的'
字符,导入prod表无法正常工作。生成的insert语句如下所示:
insert into myTable (id, name, sql)
values (1, 'John', 'select * /* this is a hint */
from table1
where attr1 = 'hi,you' and attr2 = 'me, too')
如何插入此CLOB
,或如何以更好的方式导出它?
答案 0 :(得分:1)
如果可用,我会使用Data Pump。
如果没有,我会使用SQL * Loader。
你能做什么,是使用SQL Developer将你的表卸载到SQL * Loader设置,每个CLOB都会被写入一个文件,然后就可以加载它们,就像你所看到的一样。< / p>
我写了这个here来了解如何使用BLOBS进行此操作,但这是相同的过程。
输出将是将表移动到新系统,控制文件,数据流和所有LOBS所需的所有文件。
获得文件后,您需要确保安装了Oracle客户端,或拥有完整的Instant Client。
这将使您可以访问SQL * Loader。
这是一个命令行实用程序,没有GUI。它的工作方式与SQL * Plus非常相似。您需要确保设置了Oracle ENV,以便启动并连接。
但是
您需要的一切都在SQLDev为您整理的ZIP中,最大的部分是.ctl(控制文件)。
sqlldr scott CONTROL=ulcase1.ctl ulcase1.log
'scott'是数据库用户名,它会提示您输入密码。你将把ulcase1.ctl替换为你从SQLDev获得的ctl文件。日志位是可选的,但重要。
顺便说一句,这应该快速运行。
如果你在电脑上运行它,你的连接字符串将更像
sqlldr hr@server:port/service