Обикновено използвам различен начин за зареждане на BLOB данни с помощта на SQL*Loader. По принцип импортирам текстов файл, който съдържа имената на файловете и в контролния файл след това казвам на SQL*Loader, че действителното съдържание идва от lobfile.
Във вашия случай това означава, че ще трябва да създадете текстов файл, който съдържа (само) името на файла на jpg. Тогава контролният файл трябва да изглежда така:
LOAD DATA infile data.txt TRUNCATE INTO TABLE per_images FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( input_file FILLER, image_id "PER_IMAGES_s.nextval", parent_id constant 6598, table_name constant "PER_PEOPLE_F", image lobfile(input_file) terminated by eof )
Входният файл data.txt
тогава ще изглежда така:
0211664.jpg
Важно е image lobfile ...
част е в края и всяка константна дефиниция е на първо място в контролния файл.
Използването на този вид подход изглежда много по-лесно за мен, защото не е необходимо да знаете размера на входния файл и можете да заредите повече от една картина с изпълнение на SQL*Loader, което най-вероятно е много по-бързо, ако трябва да заредите голямо количество снимки.
Ако искате да заредите повече от една картина, входният файл трябва да съдържа постоянните стойности, които сте предоставили досега в контролния файл. Вземете следния входен файл:
6598,PER_PEOPLE_F,0211664.jpg 6599,PER_PEOPLE_F,0123456.jpg 6600,PER_PEOPLE_X,0987654.jpg
След това можете да заредите и трите картини с един контролен файл:
LOAD DATA infile data.txt TRUNCATE INTO TABLE per_images FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( parent_id, table_name, input_file FILLER, image_id "PER_IMAGES_s.nextval", image lobfile(input_file) terminated by eof )
Контролният файл никога няма да се промени, само съдържанието на data.txt
файл.
Вашият оригинален контролен файл работи за мен, ако raw(9529)
се премахва напълно:
options (bindsize 9529) load data infile 0211664.jpg "fix 9529" append into table PER_IMAGES ( image, parent_id constant 6598, table_name constant "PER_PEOPLE_F", image_id "PER_IMAGES_s.nextval" )