使用 SQL 开发人员导出和插入包含 SQL 语句的 CLOB 数据

Export and insert CLOB data containing SQL statements with SQL Developer

我有一个 table,其中 CLOB 列包含 SQL 代码。现在我想将内容从开发人员数据库转移到生产数据库中。我使用下面的脚本导出devtable:

的内容
set long 100000
set lines 1000
spool d:\export.sql
select /*insert*/* from myTable;
spool off

但是,由于 SQL 代码中的 ' 个字符,无法导入产品 table。生成的插入语句如下所示:

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,或者如何以更好的方式导出它?

如果可用,我会使用 Data Pump。

如果没有,我会使用 SQL*Loader。

你可以做的是使用 SQL Developer 将你的 table 卸载到 SQL*Loader 设置,每个 CLOB 将被写入一个文件,它们可以是然后加载 w/o 问题就像你看到的那样。

我写这篇 here 是为了说明如何使用 BLOBS 执行此操作,但过程相同。

输出将是将 table 移至新系统所需的所有文件、控制文件、数据流和所有 LOBS。

获得文件后,您需要确保安装了 Oracle 客户端,或者安装了完整的 Instant Client。

这将使您能够访问 SQL*Loader。

这是一个命令行实用程序,没有 GUI。它的工作原理与 SQL*Plus 非常相似。您需要确保您的 Oracle ENV 已设置,以便您可以启动它并进行连接。

但是

您需要的一切都在 SQLDev 为您整理的 ZIP 中,最大的部分是 .ctl(控制文件)。

Docs

sqlldr scott CONTROL=ulcase1.ctl ulcase1.log

'scott' 是数据库用户名,它会提示你输入密码。您将从 SQLDev 获得的 ctl 文件替换为 ulcase1.ctl。日志位是可选的,但很重要。

顺便说一句,这应该运行 FAST。

如果您运行在您的电脑上连接这个,您的连接字符串将更像

sqlldr hr@server:port/service