Насколько я знаю, to_number
не может игнорировать пробел, и вы ничего не можете сделать в SQL * Loader, чтобы подготовить его.Если вы не можете удалить его, предварительно обработав файл, который, как вы предлагаете, не являются опцией, вам придется использовать строковую функцию в какой-то момент.Я бы не ожидал, что это добавит огромное количество обработки, сверх того, что to_number будет делать в любом случае, но я всегда пробовал бы это и видел, а не предполагал что-либо - избегание строковых функций звучит немного как преждевременная оптимизация.В любом случае, самое простое - это, возможно, replace
:
select to_number(replace('1.47654345670000000000 E010',' ',''),
'9.99999999999999999999EEEE') from dual;
или просто для отображения:
column num format 99999999999
select to_number(replace('1.47654345670000000000 E010',' ',''),
'9.99999999999999999999EEEE') as num from dual
NUM
------------
14765434567
Вы можете определить свою собственную функцию, чтобы немного упростить файл управления, но не увереныэто стоило бы того.
На ум приходят два других варианта.(a) Загрузите во временную таблицу как varchar
, а затем заполните реальную таблицу, используя to_number(replace())
;но я сомневаюсь, что это приведет к улучшению производительности и может быть значительно хуже.Или (b) если вы используете 11g, загрузите в столбец varchar
в реальной таблице и сделайте ваш числовой столбец виртуальный столбец , который применяет функции.
На самом деле,Третий вариант ... вообще не использовать SQL Loader, а использовать CSV-файл как внешнюю таблицу и заполнить ее реальной таблицей.Вам все равно придется выполнить to_number(replace())
, но вы можете увидеть разницу в производительности по сравнению с этим в SQL Loader.Разница может быть в том, что, конечно, хуже, но стоит попробовать.