我想将员工照片加载到表per_images中。 Per_images曾经有一个很长的原始列用于图像,但这已经变为blob。
以下用于处理长原始列的sql loader控制文件:
options (bindsize 9529)
load data
infile 0211664.jpg "fix 9529"
append
into table PER_IMAGES
(image raw(9529),
parent_id constant 6598,
table_name constant "PER_PEOPLE_F",
image_id "PER_IMAGES_s.nextval")
其中9529是jpg图片的大小。我应该如何更改原始(9529)而不是允许加载到blob列?
答案 0 :(得分:2)
我通常使用不同的方法使用SQL * Loader加载BLOB数据。基本上我导入一个包含文件名的文本文件,然后在控制文件中,我告诉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" )