Я пытаюсь экспортировать из SQL Server в Oracle таблицу, которая состоит из идентификатора и действительно длинной строки XML, хранящейся как nvarchar (max).
SQL Table -- CREATE TABLE MyStuff (MyID int, MyText nvarchar(max))<br>
Oracle Table -- CREATE TABLE MyStuffImported (MyID int, MyText NCLOB)
Я использую утилиту SQL Server bcp для экспорта в текстовый файл (MyStuff.bcp), который затем импортирую в Oracle через SQL Loader. Но SQL Loader дает сбой с этим сообщением: «Физическая запись в файле данных (MyStuff.bcp) длиннее максимальной (1048576)» , и 0 записей импортируются.
Я не уверен, в чем именно заключается проблема. Наиболее очевидная возможность состоит в том, что MyText длиннее максимального значения 1048576, и действительно некоторые записи, но не все, так почему же не импортировать хотя бы некоторые записи? И есть ли способ обойти это ограничение?
Другая возможность, о которой я читал на некоторых форумах, состоит в том, что в MyText есть разрывы строк, которые Oracle не может обработать. Я надеялся, что уже обошел эту проблему, (1) удалив \ r и \ n при экспорте из SQL, и (2) используя \ n в качестве разделителя записей в управляющем файле SQL Loader (полный файл см. Ниже) , Я делаю что-то неправильно или не обрабатываю все случаи?
Вот текст моего файла управления SQL Loader. Обратите внимание, что я использую \ в качестве разделителя, что кажется странным, но это единственный символ, не используемый в поле MyText. Следовательно, вы увидите \\
, где я имею в виду \, потому что я избегаю этого.
LOAD DATA
INFILE "MyStuff.bcp" "str '\\\n'"
APPEND INTO TABLE MyStuffImported
(
MyID INTEGER EXTERNAL TERMINATED BY "\\",
MyText CHAR TERMINATED BY "\\"
)
Есть предложения? Возможно, есть лучший способ импортировать в NCLOB через SQL Loader?