2015年Oracle认证考试辅导:处理CLOB字段的动态PLSQL
发布时间:2010/3/13 11:24:19 来源:城市学习网 编辑:MOON
动态PL/SQL,对CLOB字段操作可传递表名table_name,表的唯一标志字段名field_id,clob字段名field_name,记录号v_id,开始处理字符的位置v_pos,传入的字符串变量v_clob
修改CLOB的PL/SQL过程:0updateclob
create or replace procedure 0updateclob
is
loblocclob.
c_clobvarchar2.
amt binary_integer.
pos binary_integer.
query_strvarchar2.
begin
pos:=v_pos*32766 1.
amt := length.
c_clob:=v_clob.
query_str :=’0select ’field_name’ from ’table_name’ where ’field_id’= :id for 0update ’.
initialize buffer with data to be inserted or 0updated
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id.
from pos position, write 32766 varchar2 into lobloc
dbms_lob.write.
commit.
exception
when others then
rollback.
end.
/
用法说明:
在插入或修改以前,先把其它字段插入或修改,CLOB字段设置为空empty_clob,
然后调用以上的过程插入大于2048到32766个字符。
如果需要插入大于32767个字符,编一个循环即可解决问题。
查询CLOB的PL/SQL函数:getclob
create or replace function getclob return varchar2
is
loblocclob.
buffervarchar2.
amountnumber := 2000.
offsetnumber := 1.
query_strvarchar2.
begin
query_str :=’0select ’field_name’ from ’table_name’ where ’field_id’= :id ’.
initialize buffer with data to be found
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id.
offset:=offset *2000.
read 2000 varchar2 from the buffer
dbms_lob.read.
return buffer.
exception
when no_data_found then
return buffer.
end.
/
用法说明:
用0select getclob as partstr from dual.
可以从CLOB字段中取2000个字符到partstr中,
编一个循环可以把partstr组合成dbms_lob.getlength长度的目标字符串。
调用PL/SQL过程的方法:
SQL*PLUSSQL> EXEC 过程名.
Procedure Builder PL/SQL>过程名.
JAVACALL .
PHPBEGINEND.