2011-12-19 5 views
2

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

field "trim(:field)" 

?

+1

Фактически, по умолчанию, без опциональных 'PRESERVE BLANKS', начальное и конечное пробелы будут игнорироваться. Мой вопрос возник из-за того, что я использовал инструмент поверх sqlldr, который генерирует файл ctl, который по умолчанию добавляет 'PRESERVE BLANKS'. –

+0

Как оказалось, ведущие и завершающие пробелы присваиваются по умолчанию, но только для определенных типов данных. Однако некоторые типы, такие как VARCHAR, оставят неиспользуемые пространства. См. Ссылку ниже http://www.csee.umbc.edu/portal/help/oracle8/server.815/a67792/ch05.htm#5817 –

ответ

0

Я знаю, что это старая нить, но я все равно перезвоню.

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

2

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

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

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

+0

Да, это помогает мне, спасибо! – Reimius

+0

Мне любопытно, однако, похоже, что это не сработает, если вы проверите его, выполнив выбор отделки (null от trim ('food')) от dual. Это работает по-разному в sqlloader? – Reimius