как сказать sqlldr обрезать трейлинг и лидирующие пробелы - PullRequest
2 голосов
/ 19 декабря 2011

Я использую sqlldr для загрузки данных, в которых некоторые поля имеют конечные и ведущие пробелы. Есть ли способ сообщить sqlldr игнорировать эти пробелы, кроме как сказать

field "trim(:field)"

Ответы [ 2 ]

3 голосов
/ 27 декабря 2016

поле «trim (: field)» работает нормально в большинстве случаев, но я придумал типичный случай, когда размер столбца был char (1), но данные в контрольном файле были «Y» и «trim (: поле) "не удалось загрузить данные. После долгих исследований я узнал, что функция trim () удаляет пробелы из данных, но в то же время добавляет пустые значения в данные вместо пробелов, поэтому длина данных в приведенном выше примере будет равна 2, поскольку она считает нулевые значения. на левой стороне данных. Таким образом, данные будут похожи на nullY, поскольку размер столбца в таблице меньше, чем фактический размер, который он не загружен, и оракул выдает сообщение об ошибке. Чтобы преодолеть эту проблему, я использовал: "trim (null from trim (: field))"

Вышеуказанный скрипт сначала обрезает пробелы, а затем снова обрезает нуль, добавленный sql-загрузчиком.

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

1 голос
/ 12 августа 2013

Я знаю, что это старая тема, но я все равно буду звонить.

Как и во многих вещах, ответ «это зависит». Это зависит от того, являются ли данные фиксированным форматом или с разделителями. Если он разделен, это также зависит от того, использует ли файл управления предложение OPTIONALLY ENCLOSED BY Все подробности см. В документации по Oracle SQL * Loader. Например, попробуйте эту ссылку: http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1007768

...