Сопоставление полей в Oracle SQL Loader

При загрузке внешнего csv с помощью Oracle SQL Loader есть ли способ сопоставить поля непосредственно друг с другом в управляющем файле?

На данный момент я делаю простую загрузку, поэтому важно положение исходных полей. Есть ли способ сделать это иначе? Итак, вместо:

load data
into table1
fields terminated by "," optionally enclosed by '"'
(destination_field1, destination_field2, destination_field3)

сделать что-то вроде:

load data
into table1
fields terminated by "," optionally enclosed by '"'
(
source_field2 => destination_field1,
source_field1 => destination_field2,
source_field3 => destination_field3
)

Изменить:

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


person user2693748    schedule 18.08.2013    source источник


Ответы (1)


Вы можете включить любую обработку данных с помощью функций Oracle в свой управляющий файл.
Например, этот код меняет местами столбцы 1 и 2 и дополнительно преобразует source_field2 в число, молча заменяя неправильные значения на нули:

load data
append
into table SCHEMA.TABLE
fields terminated by ';' optionally enclosed by '"'
trailing nullcols
(
  source_field1     BOUNDFILLER,
  source_field2     BOUNDFILLER,
  source_field3     BOUNDFILLER,
  destination_field1 "to_number(regexp_substr(:source_field2, '^[-0-9,]*'),'9999999999D999','NLS_NUMERIC_CHARACTERS='', ''')",
  destination_field2 ":source_field1",
  destination_field3 ":source_field3"
)
person Egor Skriptunoff    schedule 18.08.2013
comment
Это интересно. Разве вы не можете сделать что-то вроде «destination_field1 DECODE (column1_headername, source_option1, target_header1, source_option2, target_header2, ...)»? Итак, использовать функцию DECODE для декодирования заголовка? - person user2693748; 19.08.2013
comment
@ user2693748 - Вы можете использовать decode или любую другую функцию Oracle. Но имена столбцов — это просто значения в первой строке файла данных, к ним нельзя получить доступ в выражениях для других строк данных. - person Egor Skriptunoff; 20.08.2013