SET SERVEROUTPUT ONDECLARE 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;/