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

Masukkan string uji BLOB yang lebih besar dari 2000 atau 4000 byte

Sebagai permulaan, Anda perlu memahami apa itu LOB. Mereka adalah "data besar", mungkin lebih besar dari tipe data lainnya di Oracle. Mereka seperti file biasa pada sistem file. Untuk menulis ke file di sistem file, Anda harus

  1. buka file untuk menulis
  2. potong file jika Anda ingin mulai mengisinya dari awal
  3. membaca data sumber Anda dalam potongan dalam satu lingkaran
  4. tambahkan potongan data Anda ke file dalam loop yang sama, satu per satu
  5. tutup file

Kurang lebih hal yang sama berlaku untuk LOB. Di tabel Anda, kolom LOB (CLOB/BLOB/NCLOB) hanyalah penunjuk/referensi ke tempat lain di penyimpanan disk Anda yang menyimpan data aktual. Dalam istilah Oracle standar, pointer disebut "LOB locator". Anda perlu

  1. buka/inisialisasi pencari LOB
  2. potong konten LOB, jika Anda ingin mulai mengisinya dari awal
  3. tambahkan potongan data Anda ke konten LOB dalam satu lingkaran, satu per satu
  4. tutup pencari LOB

Di PL/SQL bisa terlihat seperti ini:

-- create table blob_test(id number, b blob);

declare 
  v_b blob; 
  aaa raw(32767);
  longLine varchar2(32767);
begin 
  longLine :=  LPAD('aaaa', 32767,'x');
  aaa := UTL_RAW.CAST_TO_RAW(longLine);
  insert into blob_test values(1,empty_blob()) returning b into v_b;
  dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  dbms_lob.writeappend(v_b,UTL_RAW.LENGTH (aaa) ,aaa);
  dbms_lob.close(LOB_LOC=>v_b);
  commit;
end;

Penjelasan:

  1. inisialisasi pencari lokasi LOB =insert into blob_test values(1,empty_blob()) returning b into v_b;
  2. buka pencari LOB untuk menulis =dbms_lob.open(v_b,dbms_lob.lob_readwrite);
  3. potong isi LOB, jika Anda ingin mulai mengisinya dari awal ... Ini dilakukan oleh empty_blob() panggil di insert .
  4. tambahkan potongan data Anda ke konten LOB dalam satu lingkaran, satu per satu =di sini hanya satu iterasi dbms_lob.writeappend() , hanya menambahkan satu potongan aaa panjang utl_raw.length(aaa) (maksimal 32767) ke dalam LOB v_b
  5. tutup pencari LOB =dbms_lob.close(LOB_LOC=>v_b);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Malas mengambil di MyBatis

  2. Butuh bantuan untuk memahami perilaku SELECT ... FOR UPDATE yang menyebabkan kebuntuan

  3. Cara memasukkan atribut img src yang disandikan base64 ke dalam tabel di Oracle dan kemudian menampilkannya di halaman di Oracle apex

  4. Bisakah kueri SQL Oracle mengeksekusi kueri string yang dipilih dari tabel?

  5. manajer sesi/entitas ditutup