2015-03-26 4 views
0

У меня есть таблица, которая должна быть заполнена через sqlloader. Можно ли использовать логику в файле ctl, чтобы она могла обслуживать файлы с разным количеством полей? напримерsqlloader case statement variable number of columns

Таблица = field1 field2 field3 Field4

Формат файла 1 = field1 field2 Field4

Формат файла 2 = 1 поле field2 field3 Field4

было бы проще переключаться между различными файлами .ctl на основе по имени файла (например, сделать одно с 4 полями, отличным от имени, до одного с 3), или может sqlloader «подсчитать» количество полей, которые оно было предоставлено, и затем применить их к таблице логически, если регистр case?

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

ответ

0

Возможно, вы можете сделать это, используя поле типа BOUNDFILLER для двух последних столбцов в вашем файле. Пример файла управления может выглядеть следующим образом:

load data characterset WE8ISO8859P15 
infile 'mydata.dat' 
badfile 'mydata.bad' 
discardfile 'mydata.dsc' 
append 
into table mytable fields terminated by whitespace trailing nullcols 
(
    field1, 
    field2, 
    bind1 BOUNDFILLER, 
    bind2 BOUNDFILLER, 
    -- if bind2 is present, use value of bind1, else set to null 
    field3 "nvl2(:bind2, :bind1, null)", 
    -- if bind2 is null, use value of bind1 
    field4 "nvl(:bind2, :bind1)" 
) 

Итак, вы определили бы шесть полей в файле управления:

  • Первые два, как «нормальные» поля вы всегда ожидаете увидеть в файле (field1 и field2)
  • Следующие два как местные BOUNDFILLER переменных, которые вы хотите использовать в качестве входных данных в выражения (bind1 и bind2)
  • Последние два, как Фиэль ds вы будете заполнять на основе выражения (field3 и field4). Они не будут сопоставляться с какими-либо фактическими столбцами во входном файле.

trailing nullcols Опция должна заполнить bind2 как NULL, даже если ваш входной файл имеет только три столбца. Этот подход будет работать, только если вы никогда не ожидаете значений NULL в последнем столбце в четырехстолбцовых входных файлах.

Я не проверял это, но, возможно, стоит попробовать.