Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle cara memuat gambar ke kolom gumpalan menggunakan sqlldr

Saya biasanya menggunakan cara berbeda untuk memuat data BLOB menggunakan SQL*Loader. Pada dasarnya saya mengimpor file teks yang berisi nama file dan di file kontrol, saya kemudian memberi tahu SQL*Loader bahwa konten sebenarnya berasal dari lobfile.

Dalam kasus Anda, ini berarti Anda perlu membuat file teks yang berisi (hanya) nama file jpg. File kontrol kemudian akan terlihat seperti ini:

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
)

File masukan data.txt maka akan terlihat seperti ini:

0211664.jpg

Penting bahwa image lobfile ... bagian ada di akhir dan definisi konstan apa pun didahulukan dalam file kontrol.

Menggunakan pendekatan semacam ini tampaknya jauh lebih sederhana bagi saya karena Anda tidak perlu mengetahui ukuran file input dan Anda dapat memuat lebih dari satu gambar dengan menjalankan SQL*Loader yang kemungkinan besar jauh lebih cepat jika Anda perlu memuat sejumlah besar gambar.

Jika Anda ingin memuat lebih dari satu gambar, file input harus berisi nilai konstanta yang Anda berikan sejauh ini di dalam file kontrol. Ambil file input berikut:

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

Kemudian Anda dapat memuat ketiga gambar dengan satu file kontrol:

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
)

File kontrol tidak akan pernah berubah, hanya isi data.txt berkas.

File kontrol asli Anda berfungsi untuk saya, jika raw(9529) dihapus sepenuhnya:

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. Nilai Urutan Oracle tidak dipesan

  2. Bagaimana cara menghindari regexp_replace di Oracle?

  3. Minta Oracle untuk detail kesalahan kode ORA

  4. Oracle SQL cara mengelompokkan, tetapi memiliki beberapa baris jika grup diulang di kemudian hari

  5. Skema Bintang vs Kepingan Salju di pergudangan data?