Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle как да заредите картина в blob колона с помощта на sqlldr

Обикновено използвам различен начин за зареждане на BLOB данни с помощта на SQL*Loader. По принцип импортирам текстов файл, който съдържа имената на файловете и в контролния файл след това казвам на SQL*Loader, че действителното съдържание идва от lobfile.

Във вашия случай това означава, че ще трябва да създадете текстов файл, който съдържа (само) името на файла на jpg. Тогава контролният файл трябва да изглежда така:

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
)

Входният файл data.txt тогава ще изглежда така:

0211664.jpg

Важно е image lobfile ... част е в края и всяка константна дефиниция е на първо място в контролния файл.

Използването на този вид подход изглежда много по-лесно за мен, защото не е необходимо да знаете размера на входния файл и можете да заредите повече от една картина с изпълнение на SQL*Loader, което най-вероятно е много по-бързо, ако трябва да заредите голямо количество снимки.

Ако искате да заредите повече от една картина, входният файл трябва да съдържа постоянните стойности, които сте предоставили досега в контролния файл. Вземете следния входен файл:

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

След това можете да заредите и трите картини с един контролен файл:

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
)

Контролният файл никога няма да се промени, само съдържанието на data.txt файл.

Вашият оригинален контролен файл работи за мен, ако raw(9529) се премахва напълно:

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. ojdbc14.jar срещу ojdbc6.jar

  2. ORA-00932:непоследователни типове данни:очаквано - получено -

  3. Entity framework 6 и oracle

  4. PreparedStatement е null в клаузата Where без if условни (динамична заявка) или безсмислени стойности

  5. Функция NLS_COLLATION_NAME() в Oracle