sql >> Databáze >  >> RDS >> Oracle

Oracle, jak načíst obrázek do sloupce blob pomocí sqlldr

Obvykle používám jiný způsob načítání dat BLOB pomocí SQL*Loader. V podstatě importuji textový soubor, který obsahuje názvy souborů a v kontrolním souboru pak SQL*Loaderu řeknu, že skutečný obsah pochází z lobfile.

Ve vašem případě to znamená, že budete muset vytvořit textový soubor, který obsahuje (pouze) název souboru jpg. Ovládací soubor by pak měl vypadat takto:

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
)

Vstupní soubor data.txt by pak vypadalo takto:

0211664.jpg

Je důležité, aby image lobfile ... část je na konci a že jakákoli definice konstanty je v řídicím souboru na prvním místě.

Použití tohoto druhu přístupu se mi zdá mnohem jednodušší, protože nepotřebujete znát velikost vstupního souboru a můžete načíst více než jeden obrázek pomocí běhu SQL*Loader, což je pravděpodobně mnohem rychlejší, pokud potřebujete načíst soubor velké množství obrázků.

Chcete-li načíst více než jeden obrázek, vstupní soubor musí obsahovat konstantní hodnoty, které jste dosud zadali v řídicím souboru. Vezměte následující vstupní soubor:

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

Poté můžete načíst všechny tři obrázky pomocí jediného kontrolního souboru:

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
)

Kontrolní soubor se nikdy nezmění, pouze obsah data.txt soubor.

Váš původní kontrolní soubor mi funguje, pokud raw(9529) je zcela odstraněn:

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. ukládání/ukládání UDF

  2. Formátování čísel v Oracle pomocí TO_CHAR

  3. Řetězec k datu v Oracle s milisekundami

  4. Hodnoty SQL seskupují pro jeden sloupec jiným sloupcem