dbms_lob包学习笔记之二:append和write存储过程

来源:互联网 发布:淘宝店转化率多少合适 编辑:程序博客网 时间:2024/05/16 08:55

两个写数据的存储过程

dbms_lob.append 和 dbms_lob.write
append存储过程用于将一个大对象添加到另一个大对象中,此时是将源大对象的内容全部添加过去。append存储过程的语法如下:
dbms_lob.append(
dest_lob in out nocopy blob,
src_lob in blob);

dbms_lob.append(
dest_lob in out nocopy clob character set any_cs,
src_lob in clob character set dest_lob%charset);
其中,各个参数的含义如下:
dest_lob是被源lob添加到的目标lob的定位器
src_lob是源lob的定位器
any_cs用来指定字符集。

write存储过程
write存储过程能够将数据写入大型对象中。写的位置是从大型对象开始处的某个绝对偏移地址,数据从缓冲区参数被写入。写操作将覆盖已经在大型对象偏移地址处存在的任何长度为指定的数据。如果输入数多于在缓冲区的数据,将产生一个错误。如果输入数量小于在缓冲区的数据,那么只有缓冲区的数据字节活字符被写给大型对象。
write存储过程的语法如下:
dbms_lob.write(
lob_loc in out nocopy blob,
amount in binary_integer,
offset in integer,
buffer in raw);

dbms_lob.write(
lob_loc in out nocopy clob character set any_cs,
amount in binary_integer,
offset in integer,
buffer in varchar2 character set lob_loc%charset);

其中各个参数的含义如下:
lob_loc是要操作的大型对象定位器。
amount是要写道大型对象中去的字节数量。
offset是指定将数据写入到大型对象什么位置的偏移地址。
buffer是写入到大型对象的数据缓冲区。
any_cs指定要使用的字符集。

示例:
declare
source_lob clob;
dest_lob clob;
write_amount integer:=18;
writing_position integer;
buffer varchar2(20) := 'Added text to clob';
begin
select clob_locator into dest_lob from mylobs where lob_index = 4 for update;
select clob_locator into source_lob from mylobs where lob_index = 1;
dbms_lob.append(dest_lob, source_lob);
commit;

select clob_locator into dest_lob from mylobs where lob_index = 5 for update;
writing_position := dbms_lob.getlength(dest_lob) + 1;
dbms_lob.write(dest_lob, write_amount, writing_position, buffer);
commit;
end;
/

SQL> select * from mylobs;