我通常使用不同的方式使用 SQL*Loader 加载 BLOB 数据。基本上,我导入一个包含文件名的文本文件,然后在控制文件中告诉 SQL*Loader 实际内容来自 lobfile。
在您的情况下,这意味着您需要创建包含(仅)jpg 文件名的文本文件。控制文件应如下所示:
加载数据
输入数据.txt
截短
INTO TABLE per_images
由 ',' 尾随 NULLCOLS 终止的字段
(
输入文件填充器,
image_id "PER_IMAGES_s.nextval",
parent_id 常量 6598,
表名常量“PER_PEOPLE_F”,
图像 lobfile(input_file) 由 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
然后,您可以使用单个控制文件加载所有三张图片:
加载数据
输入数据.txt
截短
INTO TABLE per_images
由 ',' 尾随 NULLCOLS 终止的字段
(
parent_id,
表名,
输入文件填充器,
image_id "PER_IMAGES_s.nextval",
图像 lobfile(input_file) 由 eof 终止
)
控制文件永远不会改变,只会改变文件的内容data.txt
。
raw(9529)
如果完全删除,您的原始控制文件对我有用:
选项(绑定大小 9529)
加载数据
infile 0211664.jpg “修复 9529”
附加
进入表 PER_IMAGES
(
图片,
parent_id 常量 6598,
表名常量“PER_PEOPLE_F”,
image_id "PER_IMAGES_s.nextval"
)