私は通常、SQL*Loaderを使用してBLOBデータをロードするために別の方法を使用します。基本的に、ファイル名を含むテキストファイルをインポートし、制御ファイルで、実際のコンテンツがlobfileからのものであることをSQL*Loaderに通知します。
あなたの場合、これは、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
次に、1つの制御ファイルで3つの画像すべてをロードできます。
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" )