ID と nvarchar(max) として格納された非常に長い XML 文字列で構成されるテーブルを SQL Server から Oracle にエクスポートしようとしています。
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 よりも長いことです。実際、一部のレコードは長くなっていますが、すべてではありません。少なくとも一部のレコードがインポートされなかったのはなぜですか? そして、この制限を回避する方法はありますか?
もう 1 つの可能性は、いくつかのディスカッション ボードで読んだことですが、MyText に Oracle が処理できない改行があるというものです。(1) SQL からのエクスポート中に \r と \n を削除し、(2) SQL ローダー制御ファイルのレコード区切り文字で \n を使用することで、この問題を回避していることを願っていました (完全なファイルについては以下を参照)。 . 私は何か間違ったことをしていますか、それともすべてのケースを処理していませんか?
以下は、私の SQL ローダー制御ファイルのテキストです。区切り文字として \ を使用していることに注意してください。これは奇妙に思えますが、MyText フィールドで使用されていない唯一の文字です。\\
したがって、エスケープしているので、\ の意味 がわかります。
LOAD DATA
INFILE "MyStuff.bcp" "str '\\\n'"
APPEND INTO TABLE MyStuffImported
(
MyID INTEGER EXTERNAL TERMINATED BY "\\",
MyText CHAR TERMINATED BY "\\"
)
助言がありますか?おそらく、SQL Loader を介して NCLOB にインポートするより良い方法はありますか?