--Oracle clob 操作
-- Created on 2015/4/8 by TianPing
declare
-- Local variables here
v_clob1 Clob;
v_clob2 Clob;
v_amount Int; --長度
v_offset Int; --偏移量
str varchar2(100);
Begin
--初始或清空clob變量
dbms_lob.createtemporary(v_clob1,True);
dbms_lob.createtemporary(v_clob2,True);
--向clob變量寫入字符
dbms_lob.write(v_clob1,30,1,'123456789012345678901234567890');
dbms_output.put_line(v_clob1);
--初始或清空clob字段
Update test_lob Set clob_test=empty_clob() Where lob_id=1;
--寫入clob字段。要先取得clob定位器並鎖定記錄,緩沖區最大長度32767,超 過要多次寫入
Select clob_test Into v_clob2 From test_lob Where lob_id=1;
-- Update test_lob Set clob_test=v_clob1 Where lob_id=1;
dbms_lob.write(v_clob2,26,1,'abcdefghijklmnopkrstuvwxyz');
--取clob字段定位器
Select clob_test Into v_clob1 From test_lob Where lob_id=1 ;
dbms_output.put_line(v_clob1);
--向clob變量寫入字符串
v_amount:=26; --寫入長度
v_offset:=21; --開始寫入位置
dbms_lob.write(v_clob1,v_amount,v_offset,'abcdefghijklmnopkrstuvwxyz');
dbms_output.put_line(v_clob1);
--擦除clob變量部份字符串,擦掉部份用空格代替
v_amount:=5; --擦除長度
v_offset:=31; --開始擦除位置
dbms_lob.erase(v_clob1,v_amount,v_offset);
dbms_output.put_line(v_clob1);
--截取clob前面部份字符串
v_amount:=20; --截取長度
dbms_lob.trim(v_clob1,v_amount);
dbms_output.put_line(v_clob1);
--截取clob部份字符串,注意substr是一個函數而不是一個存儲過程,不修改clob變量的值
v_amount:=11; --截取長度
v_offset:=3; --開始截位置
dbms_output.put_line(dbms_lob.substr(v_clob1,v_amount,v_offset));
dbms_output.put_line(v_clob1);
--查找clob中字符串'89'從第11個字符開始第1次出現的位置
dbms_output.put_line(dbms_lob.instr(v_clob1,'89',11,1));
--查找clob中字符串'89'從第5個字符開始第2次出現的位置,如不出現返回0
dbms_output.put_line(dbms_lob.instr(v_clob1,'89',11,2));
--取clob對象長度
dbms_output.put_line(dbms_lob.getlength(v_clob1));
--把緩沖區字串添加到clob對象尾部,緩沖區最大長度32767,超 過要多次寫入
str:='abcdefghijklmnopqrstuvwxyz';
dbms_lob.append(v_clob1,str);
dbms_output.put_line(v_clob1);
--截取緩沖區前5個字符添加到clob對象尾部
str:='1234567890';
dbms_lob.writeappend(v_clob1,5,str);
dbms_output.put_line(v_clob1);
--讀部份字串到緩沖區
v_amount:=26; --讀取長度
v_offset:=21; --開始讀取位置
dbms_lob.read(v_clob1,v_amount,v_offset,str);
dbms_output.put_line(str);
end;