Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle, wie man ein Bild mit sqlldr in eine Blob-Spalte lädt

Normalerweise verwende ich eine andere Methode zum Laden von BLOB-Daten mit SQL*Loader. Grundsätzlich importiere ich eine Textdatei, die die Dateinamen enthält, und in der Steuerdatei sage ich dann SQL*Loader, dass der eigentliche Inhalt aus einer LOB-Datei stammt.

In Ihrem Fall bedeutet dies, dass Sie eine Textdatei erstellen müssen, die (nur) den Dateinamen des JPG enthält. Die Steuerdatei sollte dann so aussehen:

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
)

Die Eingabedatei data.txt würde dann so aussehen:

0211664.jpg

Es ist wichtig, dass die image lobfile ... part am Ende steht und dass jede Konstantendefinition zuerst in der Steuerdatei steht.

Die Verwendung dieser Art von Ansatz erscheint mir viel einfacher, da Sie die Größe der Eingabedatei nicht kennen müssen und Sie mehr als ein Bild mit einem SQL*Loader-Lauf laden können, was höchstwahrscheinlich viel schneller ist, wenn Sie ein laden müssen große Menge an Bildern.

Wenn Sie mehr als ein Bild laden möchten, muss die Eingabedatei die konstanten Werte enthalten, die Sie bisher in der Steuerdatei angegeben haben. Nehmen Sie die folgende Eingabedatei:

6598,PER_PEOPLE_F,0211664.jpg
6599,PER_PEOPLE_F,0123456.jpg
6600,PER_PEOPLE_X,0987654.jpg

Dann können Sie alle drei Bilder mit einer einzigen Steuerdatei laden:

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
)

Die Steuerdatei wird sich nie ändern, nur der Inhalt der data.txt Datei.

Ihre ursprüngliche Steuerdatei funktioniert für mich, wenn die raw(9529) wird vollständig entfernt:

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"
)