Zwykle używam innego sposobu ładowania danych BLOB za pomocą SQL*Loader. Zasadniczo importuję plik tekstowy, który zawiera nazwy plików iw pliku kontrolnym, a następnie mówię SQL*Loaderowi, że rzeczywista zawartość pochodzi z pliku lobfile.
W twoim przypadku oznacza to, że musisz utworzyć plik tekstowy, który zawiera (tylko) nazwę pliku jpg. Plik kontrolny powinien wtedy wyglądać tak:
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 )
Plik wejściowy data.txt
wyglądałby wtedy tak:
0211664.jpg
Ważne jest, aby image lobfile ...
część jest na końcu i każda stała definicja znajduje się na pierwszym miejscu w pliku kontrolnym.
Korzystanie z tego rodzaju podejścia wydaje mi się o wiele prostsze, ponieważ nie trzeba znać rozmiaru pliku wejściowego i można załadować więcej niż jeden obraz za pomocą uruchomienia programu SQL*Loader, który najprawdopodobniej jest znacznie szybszy, jeśli trzeba załadować duża ilość zdjęć.
Jeśli chcesz załadować więcej niż jeden obraz, plik wejściowy musi zawierać wartości stałe podane do tej pory w pliku kontrolnym. Weź następujący plik wejściowy:
6598,PER_PEOPLE_F,0211664.jpg 6599,PER_PEOPLE_F,0123456.jpg 6600,PER_PEOPLE_X,0987654.jpg
Następnie możesz załadować wszystkie trzy zdjęcia za pomocą jednego pliku kontrolnego:
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 )
Plik kontrolny nigdy się nie zmieni, tylko zawartość pliku data.txt
plik.
Twój oryginalny plik kontrolny działa dla mnie, jeśli raw(9529)
zostanie całkowicie usunięty:
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" )