Мне нужно динамически изменять Infile в моем файле CTL при каждом запуске. Как мне этого добиться?


ЗАГРУЗИТЬ ДАННЫЕ INFILE '/XXINSTANCEXX/applmgr/CUSTOM/xbol/12.0.0/bin/XX_DATA.csv'

ЗАМЕНИТЬ В ТАБЛИЦУ XX_STAGING_TABLE

ПОЛЯ, ЗАКОНЧЕННЫЕ ","

TRAILING NULLCOLS

Это часть моего CTL, используемого в моей параллельной программе. Мне нужно обновлять INFILE при каждом запуске. Я буду знать путь, но мне нужно изменить имя файла в этом примере XX_DATA.csv на другое.

Предположим, что у нас будет определенный шаблон для файла CSV, который я собираюсь получить. Таким образом, если файл будет доставлен 9 апреля 2015 года, он будет называться NEWFILE09042015, а файл, поступивший на следующий день, будет иметь имя файла NEWFILE10042015, через день после NEWFILE11042015 и так далее. Таким образом, мы эффективно знаем имя файла, которое мы получим, но нам нужно найти способ, с помощью которого я могу обновить его в моем файле CTL.

Как я могу этого добиться?


person Nitin Govindan    schedule 09.04.2015    source источник
comment
Вы говорите, что это параллельная программа. Итак, как вызывается этот файл ctl, есть ли у вас какой-либо сценарий оболочки, который его вызывает.   -  person vakul    schedule 30.09.2015


Ответы (2)


Вам необходимо указать имя файла в командной строке с помощью параметра DATA. Скорее всего, вам понадобится сценарий-оболочка, который будет вызывать sqlldr с правильным именем файла.

См. Этот ответ, чтобы узнать о некоторых других альтернативах, которые могут сработать в вашей ситуации: вставить временную шкалу INFILE в столбец из SQLLOADER

person Gary_W    schedule 09.04.2015

Вы можете использовать одну или несколько экспортированных системных переменных (по крайней мере, в Unix) в имени файла, указанном INFILE.

Все, что вам нужно сделать, это использовать двойные кавычки вместо одинарных кавычек вокруг пути к файлу, указанного INFILE.

E.g.:

LOAD DATA INFILE "/XXINSTANCEXX/applmgr/CUSTOM/xbol/12.0.0/bin/$FILENAME.csv"
person Durban_legend    schedule 15.07.2016