Загрузка 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) )
но неявное преобразование обычно тоже будет в порядке.