Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle, jak załadować obraz do kolumny blob za pomocą sqlldr

Zwykle używam innego sposobu ładowania danych BLOB za pomocą SQL*Loader. Zasadniczo importuję plik tekstowy, który zawiera nazwy plików iw pliku kontrolnym, a następnie mówię SQL*Loaderowi, że rzeczywista zawartość pochodzi z pliku lobfile.

W twoim przypadku oznacza to, że musisz utworzyć plik tekstowy, który zawiera (tylko) nazwę pliku jpg. Plik kontrolny powinien wtedy wyglądać tak:

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
)

Plik wejściowy data.txt wyglądałby wtedy tak:

0211664.jpg

Ważne jest, aby image lobfile ... część jest na końcu i każda stała definicja znajduje się na pierwszym miejscu w pliku kontrolnym.

Korzystanie z tego rodzaju podejścia wydaje mi się o wiele prostsze, ponieważ nie trzeba znać rozmiaru pliku wejściowego i można załadować więcej niż jeden obraz za pomocą uruchomienia programu SQL*Loader, który najprawdopodobniej jest znacznie szybszy, jeśli trzeba załadować duża ilość zdjęć.

Jeśli chcesz załadować więcej niż jeden obraz, plik wejściowy musi zawierać wartości stałe podane do tej pory w pliku kontrolnym. Weź następujący plik wejściowy:

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

Następnie możesz załadować wszystkie trzy zdjęcia za pomocą jednego pliku kontrolnego:

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
)

Plik kontrolny nigdy się nie zmieni, tylko zawartość pliku data.txt plik.

Twój oryginalny plik kontrolny działa dla mnie, jeśli raw(9529) zostanie całkowicie usunięty:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podzielić interwał między dwiema datami na szczegóły według miesiąca?

  2. Powiedz mi, jak uzyskać dostęp do bazy danych OracleDB z Raspberry Pi przez QUERY

  3. Jak pobrać aktualną wartość sekwencji wyroczni bez jej zwiększania?

  4. Używanie 'kolumny wyrażenia przypadku' w klauzuli where

  5. Ustawienie wyższego rozmiaru pobieranych wierszy Oracle powoduje spowolnienie mojej aplikacji?