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 ;
/
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 ;
/