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
- buka file untuk menulis
- potong file jika Anda ingin mulai mengisinya dari awal
- membaca data sumber Anda dalam potongan dalam satu lingkaran
- tambahkan potongan data Anda ke file dalam loop yang sama, satu per satu
- 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
- buka/inisialisasi pencari LOB
- potong konten LOB, jika Anda ingin mulai mengisinya dari awal
- tambahkan potongan data Anda ke konten LOB dalam satu lingkaran, satu per satu
- 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:
- inisialisasi pencari lokasi LOB =
insert into blob_test values(1,empty_blob()) returning b into v_b;
- buka pencari LOB untuk menulis =
dbms_lob.open(v_b,dbms_lob.lob_readwrite);
- potong isi LOB, jika Anda ingin mulai mengisinya dari awal ... Ini dilakukan oleh
empty_blob()
panggil diinsert
. - tambahkan potongan data Anda ke konten LOB dalam satu lingkaran, satu per satu =di sini hanya satu iterasi
dbms_lob.writeappend()
, hanya menambahkan satu potonganaaa
panjangutl_raw.length(aaa)
(maksimal 32767) ke dalam LOBv_b
- tutup pencari LOB =
dbms_lob.close(LOB_LOC=>v_b);