Jeg bruger normalt en anden måde at indlæse BLOB-data ved hjælp af SQL*Loader. Som udgangspunkt importerer jeg en tekstfil, der indeholder filnavnene, og i kontrolfilen fortæller jeg så SQL*Loader, at det faktiske indhold kommer fra en lobfil.
I dit tilfælde betyder det, at du skal oprette en tekstfil, der (kun) indeholder filnavnet på jpg. Kontrolfilen skulle så se sådan ud:
LOAD DATAinfile data.txtTRUNCATEINTO TABLE per_imagesFIELDS TERMINATED BY ',' TRAILING NULLCOLS( input_file FILLER, image_id "PER_IMAGES_s.nextval", parent_id konstant 6598, tabelnavn konstant "PER_PEOPLE_F", image lobfile(input_file) afsluttet af eof )
Inputfilen data.txt
ville så se sådan ud:
0211664.jpg
Det er vigtigt, at image lobfile ...
del er i slutningen, og at enhver konstant definition kommer først i kontrolfilen.
At bruge denne form for tilgang virker meget enklere for mig, fordi du ikke behøver at kende størrelsen på inputfilen, og du kan indlæse mere end ét billede med en SQL*Loader-kørsel, som sandsynligvis er meget hurtigere, hvis du skal indlæse en store mængder billeder.
Hvis du vil indlæse mere end ét billede, skal inputfilen indeholde de konstante værdier, som du har angivet indtil videre inde i kontrolfilen. Tag følgende inputfil:
6598,PER_PEOPLE_F,0211664.jpg6599,PER_PEOPLE_F,0123456.jpg6600,PER_PEOPLE_X,0987654.jpg
Så kan du indlæse alle tre billeder med en enkelt kontrolfil:
LOAD DATAinfile data.txtTRUNCATEINTO TABLE per_imagesFIELDS TERMINATED BY ',' TRAILING NULLCOLS( parent_id, table_name, input_file FILLER, image_id "PER_IMAGES_s.nextval", image lobfile(input_file of) Kontrolfilen vil aldrig ændre sig, kun indholdet afdata.txt
fil.Din originale kontrolfil virker for mig, hvis
raw(9529)
fjernes fuldstændigt:indstillinger (bindstørrelse 9529) indlæs data i fil 0211664.jpg "fix 9529"tilføjelse til tabel PER_IMAGES(billede, parent_id konstant 6598, tabelnavn konstant "PER_PEOPLE_F", image_id "PER_IMAGES_s.nextval")