Загрузка bfile через SQL Loader

Я пытаюсь загрузить значения в таблицу, один из столбцов которой является BFILE с использованием SQL Loader.

Моя таблица выглядит так:

create table documents 
    ( id number primary key
    , text bfile)

Вот мои CTL и DAT файлы:

loader.ctl

load data
infile d':\test\loader.dat'
into table documents
replace
fields terminated by ';'
    ( id integer
    , text bfilename('MY_DIRECTORY', 'my_file.txt') terminated by eof)

loader.dat

3;my_file.txt

Когда я выполняю команду sqlldr с указанными выше параметрами, я получаю сообщение об ошибке:

SQL * Loader-350: ошибка Suntax в строке 7.

Ожидая "," или ")", найдено "bfilename".

    , text bfilename('MY_DIRECTORY', 'my_file.txt') terminated by eof)

    ^

Я делаю что-то не так или SQL Loader не принимает BFILE?

Спасибо,

1 ответ

Решение

В документации есть раздел о загрузке столбцов BFILE.

Вам нужно иметь столбец заполнителя, который будет представлять поле имени файла в вашем файле данных, а затем ссылаться на это имя поля заполнителя в bfile() - и не bfilename() - определение поля:

load data
infile d:\test\loader.dat
into table documents
replace
fields terminated by ';'
    ( id
    , filename filler
    , text bfile(constant 'MY_DIRECTORY', filename) )

Вы не хотите, чтобы ваш ID поле, которое будет объявлено как integer; это двоичное целое число из полного слова, и вы, вероятно, не получите ожидаемого значения в столбце таблицы.

Если вы хотите явно преобразовать в число, вы можете сделать:

...
fields terminated by ';'
    ( id "to_number(:id)"
    , filename filler
    , text bfile(constant 'MY_DIRECTORY', filename) )

но неявное преобразование обычно тоже будет в порядке.

Другие вопросы по тегам