Saya biasanya menggunakan cara berbeda untuk memuat data BLOB menggunakan SQL*Loader. Pada dasarnya saya mengimpor file teks yang berisi nama file dan di file kontrol, saya kemudian memberi tahu SQL*Loader bahwa konten sebenarnya berasal dari lobfile.
Dalam kasus Anda, ini berarti Anda perlu membuat file teks yang berisi (hanya) nama file jpg. File kontrol kemudian akan terlihat seperti ini:
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 )
File masukan data.txt
maka akan terlihat seperti ini:
0211664.jpg
Penting bahwa image lobfile ...
bagian ada di akhir dan definisi konstan apa pun didahulukan dalam file kontrol.
Menggunakan pendekatan semacam ini tampaknya jauh lebih sederhana bagi saya karena Anda tidak perlu mengetahui ukuran file input dan Anda dapat memuat lebih dari satu gambar dengan menjalankan SQL*Loader yang kemungkinan besar jauh lebih cepat jika Anda perlu memuat sejumlah besar gambar.
Jika Anda ingin memuat lebih dari satu gambar, file input harus berisi nilai konstanta yang Anda berikan sejauh ini di dalam file kontrol. Ambil file input berikut:
6598,PER_PEOPLE_F,0211664.jpg 6599,PER_PEOPLE_F,0123456.jpg 6600,PER_PEOPLE_X,0987654.jpg
Kemudian Anda dapat memuat ketiga gambar dengan satu file kontrol:
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 )
File kontrol tidak akan pernah berubah, hanya isi data.txt
berkas.
File kontrol asli Anda berfungsi untuk saya, jika raw(9529)
dihapus sepenuhnya:
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" )