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

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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值