sql >> Database >  >> RDS >> Oracle

Oracle hoe een afbeelding in een blob-kolom te laden met sqlldr

Ik gebruik meestal een andere manier om BLOB-gegevens te laden met SQL * Loader. In principe importeer ik een tekstbestand dat de bestandsnamen bevat en in het controlebestand vertel ik SQL*Loader dat de daadwerkelijke inhoud uit een lobbestand komt.

In uw geval betekent dit dat u een tekstbestand moet maken dat (alleen) de bestandsnaam van de jpg bevat. Het controlebestand zou er dan als volgt uit moeten zien:

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
)

Het invoerbestand data.txt ziet er dan als volgt uit:

0211664.jpg

Het is belangrijk dat het image lobfile ... deel aan het einde is en dat elke constante definitie eerst komt in het controlebestand.

Het lijkt mij veel eenvoudiger om dit soort benadering te gebruiken, omdat u de grootte van het invoerbestand niet hoeft te weten en u meer dan één afbeelding kunt laden met een SQL*Loader-run, wat hoogstwaarschijnlijk een stuk sneller is als u een grote hoeveelheid foto's.

Als u meer dan één afbeelding wilt laden, moet het invoerbestand de constante waarden bevatten die u tot nu toe in het controlebestand hebt opgegeven. Neem het volgende invoerbestand:

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

Vervolgens kunt u alle drie de foto's laden met een enkel controlebestand:

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
)

Het controlebestand zal nooit veranderen, alleen de inhoud van de data.txt bestand.

Uw originele controlebestand werkt voor mij, als de raw(9529) is volledig verwijderd:

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



  1. ORA-02070:database ondersteunt in deze context niet

  2. Achterliggende witruimte in MySQL verwijderen

  3. Fout bij het converteren van XML van een CLOB-kolom naar XMLType-kolom

  4. Hoe de databaseconfiguratieparameter te lezen met behulp van het eigenschappenbestand in de slaapstand