对于初学者,您需要了解什么是LOB。它们是“大数据”,可能比Oracle中的任何其他数据类型大。它们就像文件系统上的常规文件。为了在文件系统上写入文件,您必须
- 打开文件进行写入
- 如果您希望从头开始填充文件,请截断文件
- 循环读取块中的源数据
- 一次又一次地将数据块添加到文件中
- 关闭档案
LOB大致相同。在您的表中,LOB(CLOB / BLOB /
NCLOB)列只是指向磁盘存储器上保存实际数据的其他位置的指针/引用。用标准的Oracle术语,该指针称为“ LOB定位器”。你需要
- 打开/初始化LOB定位器
- 如果您希望从头开始填充LOB内容,则将其截断
- 循环将您的数据块附加到LOB内容中
- 关闭LOB定位器
在PL / SQL中,它可能看起来像这样:
-- 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;一个解释:
- 初始化LOB定位器=
insert into blob_test values(1,empty_blob()) returning b into v_b;
- 打开LOB定位器以编写=
dbms_lob.open(v_b,dbms_lob.lob_readwrite);
- 如果您希望从头开始填充LOB内容,则将其截断。这是通过
empty_blob()
调用来完成的insert
。 - 在循环中将数据块附加到LOB内容中,一个一个=在此仅进行一次迭代
dbms_lob.writeappend()
,仅将单个aaa
长度的块utl_raw.length(aaa)
(最大32767个)附加到LOB中v_b
- 关闭LOB定位器=
dbms_lob.close(LOB_LOC=>v_b);



