SET SERVEROUTPUT ON
DECLARE
vs_str VARCHAR2(100);
vb_blob BLOB;
buff RAW(32000);
buffer_size INTEGER:=0;
--追加
vr_temp_raw RAW(1024);
vn_temp_raw_length INTEGER;
vs_from_str IN VARCHAR2;
vn_temp NUMBER(10);
vn_from_number IN NUMBER;
BEGIN
--必须先插入一个空的blob
INSERT INTO test_blob_t(f_name,f_blob) VALUES('zhang',empty_blob());
SELECT f_blob INTO vb_blob FROM test_blob_t WHERE f_name = 'zhang' FOR UPDATE;
--1、写字符串进blob,从第一个位置开始
--将字符串写入raw中
buff := UTL_RAW.CAST_TO_RAW(vs_str);
buffer_size := UTL_RAW.length(buff);
DBMS_OUTPUT.put_line(buffer_size);
--将raw中的数据从偏移量1开始,buffer_size个字节的数据写到blob中
DBMS_LOB.write(vb_blob,buffer_size,1,buff);
--2、追加字符串到blob中
--将字符串写入raw中
vr_temp_raw := UTL_RAW.CAST_TO_RAW(vs_from_str);
vn_temp_raw_length := UTL_RAW.length(vr_temp_raw);
--将raw中的内容追加到blob中,默认从上次blob的结束位置,写入vn_temp_raw_length个字节
DBMS_LOB.writeappend(ib_to_blob,vn_temp_raw_length,vr_temp_raw);
--3、追加数值到blob中
--转换成十六进制
vn_temp := LPAD(RTRIM(LTRIM(TO_CHAR(vn_from_number,'xxxxxxxx'))),8,'0');
--将十六进制的数据写入raw中
vr_temp_raw := HEXTORAW(vn_temp);
vn_temp_raw_length := UTL_RAW.length(vr_temp_raw);
--将raw中的内容追加到blob中,默认从上次blob的结束位置,写入vn_temp_raw_length个字节
DBMS_LOB.writeappend(ib_to_blob,vn_temp_raw_length,vr_temp_raw);
END;
/ 

本文介绍了一种在Oracle数据库中使用PL/SQL对BLOB类型进行读写操作的方法,包括初始化BLOB、写入字符串及数值数据,并通过示例展示了如何实现这些操作。
1543

被折叠的 条评论
为什么被折叠?



