0

我想将员工照片加载到表 per_images 中。Per_images 曾经有一个很长的图像原始列,但这已更改为 blob。

以下 sql 加载器控制文件用于处理长原始列:

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 图片的大小。我应该如何更改 raw(9529) 以允许加载到 blob 列中?

4

1 回答 1

2

我通常使用不同的方式使用 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"
)
于 2013-08-06T12:55:02.077 回答