您的位置:首页 > 数据库 > Oracle

在Oracle中对Blob类型的写操作的例子

2007-05-17 13:41 309 查看

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;


/



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: