我正在尝试将一个表从 SQL Server 导出到 Oracle,该表由一个 ID 和一个存储为 nvarchar(max) 的非常长的 XML 字符串组成。
SQL Table -- CREATE TABLE MyStuff (MyID int, MyText nvarchar(max))
Oracle Table -- CREATE TABLE MyStuffImported (MyID int, MyText NCLOB)
我正在使用 SQL Server bcp 实用程序导出到文本文件 (MyStuff.bcp),然后通过 SQL Loader 将其导入 Oracle。但是 SQL 加载程序失败并显示以下消息:“数据文件 (MyStuff.bcp) 中的物理记录比最大值长 (1048576)”并且导入了 0 条记录。
我不确定确切的问题是什么。最明显的可能性是 MyText 比最大值 1048576 长,确实有些记录是,但不是全部,那么为什么至少没有导入一些记录呢?有没有办法绕过这个限制?
另一种可能性是我在一些讨论板上读到的,即 MyText 中有 Oracle 无法处理的换行符。我希望我已经通过以下方式解决了这个问题:(1)在从 SQL 导出时删除 \r 和 \n,以及(2)在 SQL Loader 控制文件的记录分隔符中使用 \n(完整文件见下文) . 我是在做不正确的事情,还是没有处理所有情况?
这是我的 SQL Loader 控制文件的文本。请注意,我使用 \ 作为分隔符,这看起来很奇怪,但它是 MyText 字段中唯一未使用的字符。因此,您会看到\\
我的意思是 \ 因为我正在逃避它。
LOAD DATA
INFILE "MyStuff.bcp" "str '\\\n'"
APPEND INTO TABLE MyStuffImported
(
MyID INTEGER EXTERNAL TERMINATED BY "\\",
MyText CHAR TERMINATED BY "\\"
)
有什么建议么?也许有更好的方法通过 SQL Loader 导入 NCLOB?