Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle comment charger une image dans une colonne blob à l'aide de sqlldr

J'utilise généralement une méthode différente pour charger les données BLOB à l'aide de SQL*Loader. Fondamentalement, j'importe un fichier texte contenant les noms de fichiers et dans le fichier de contrôle, je dis ensuite à SQL * Loader que le contenu réel provient d'un fichier lob.

Dans votre cas, cela signifie que vous devrez créer un fichier texte contenant (uniquement) le nom de fichier du jpg. Le fichier de contrôle devrait alors ressembler à ceci :

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
)

Le fichier d'entrée data.txt ressemblerait alors à ceci :

0211664.jpg

Il est important que le image lobfile ... partie est à la fin et que toute définition constante vient en premier dans le fichier de contrôle.

L'utilisation de ce type d'approche me semble beaucoup plus simple car vous n'avez pas besoin de connaître la taille du fichier d'entrée et vous pouvez charger plus d'une image avec une exécution SQL * Loader, ce qui est probablement beaucoup plus rapide si vous avez besoin de charger un grande quantité de photos.

Si vous souhaitez charger plusieurs images, le fichier d'entrée doit contenir les valeurs constantes que vous avez fournies jusqu'à présent dans le fichier de contrôle. Prenez le fichier d'entrée suivant :

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

Ensuite, vous pouvez charger les trois images avec un seul fichier de contrôle :

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
)

Le fichier de contrôle ne changera jamais, seul le contenu de data.txt fichier.

Votre fichier de contrôle d'origine fonctionne pour moi, si le raw(9529) est complètement supprimé :

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