sql loader- файлы с возвратом каретки, загрузкой перевода строки в oracle с cr/lf

У меня есть извлечение данных с сервера SQL, где данные в большинстве столбцов имеют возврат каретки и перевод строки. Мне нужно загрузить их в оракула с помощью возврата каретки и перевода строки; в основном я должен отразить данные SQL Server 2012 в Oracle 11g.

ниже приведен пример моего файла извлечения

[#BOR#][#EOC#]109[#EOC#]4[#EOC#]testdata_Duplicate[#EOC#]testdata_Duplicate из чата [# EOC#] этого

является

     carriage return  field[#EOC]test2[#EOR#]

Здесь [# EOC#] - разделитель столбцов, [#EOR#] - разделитель строк. [#BOR#] указывает начало строки. Первоначально мои загрузки не удалось из-за пустых строк в плоском файле (извлечение данных). Затем я использовал [# BOR #] с оператором continueIf preserve, чтобы sqlldr не обрабатывал пустые строки (cr/lf) как физическую строку.

с [# BOR #] в качестве столбца-заполнителя моя загрузка работает нормально, но возврат каретки или перевод строки не загружаются в таблицы оракула.

Мой файл CTL, как показано ниже

load data
truncate 
CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
into table sch1.tbl1
fields terminated by '[#EOC#]'
trailing nullcols (
  field       filler,   
  a_id        integer external,
  h_id        integer external,
  title       char(128),
  descn       char(4000),
  risk        char(4000),
  comment     char(4000) terminated by '[#EOR#]')

В оракуле sch1.tbl1 столбец таблицы риска имеет данные как "это поле возврата каретки" вместо "это

является

     carriage return  field'

Я попытался заменить char(10) на строку [#crlF#] и использовать функцию замены в ctl, как показано ниже

load data
    truncate 
    CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
    into table sch1.tbl1
    fields terminated by '[#EOC#]'
    trailing nullcols (
      field       filler,   
      a_id        integer external,
      h_id        integer external,
      title       char(128),
      descn       char(4000),
      risk        char(4000) "replace(:risk,[#crlf#],chr(10))"
      comment     char(4000) terminated by '[#EOR#]')

ошибка загрузчика sql, сообщающая, что SQL*Loader-309: строка SQL не разрешена как часть спецификации поля; Я считаю, потому что мои столбцы типа данных CLOB, я не могу использовать функцию замены.

Пожалуйста, помогите мне загрузить данные с сервера sql с помощью cr/lnFeed в таблицы Oracle с помощью sqlloader. Заранее спасибо.

1 ответ

Решение

Вот решение, которое работает для меня. Вместо замены возврата каретки / перевода строки (cr/lf) в извлеченном плоском файле на [#crlF#] я сохраняю cr / lf в извлеченном файле данных. А затем я изменил свой файл ctl для обработки cr / lf с предложением INFILE с именем файла и " str '\n' ". Для Unix env нам нужно \ n, где для окон мы можем использовать \ n или \ r \ n.

увидеть ниже

load data INFILE 'filename.dat' "str '\n'" 
    truncate 
    CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
    into table sch1.tbl1
    fields terminated by '[#EOC#]'
    trailing nullcols (
      field       filler,   
      a_id        integer external,
      h_id        integer external,
      title       char(128),
      descn       char(4000),
      risk        char(4000),
      comment     char(4000) terminated by '[#EOR#]')

Я проверил это, и данные были загружены с помощью cr \ lf. Мне нужно провести более детальное тестирование, так как на данный момент я проверил одну таблицу, у меня есть еще много. Между тем, если у кого-то есть лучшее решение, я был бы более чем счастлив попробовать.

Другие вопросы по тегам