当前位置:操作系统 > Unix/Linux >>

写入到blob字段的存储过程

写入到blob字段的存储过程
 
[sql]   www.zzzyk.com  
create or replace procedure write2blob(directions blob,  
                                      v_blob     blob,  
                                      v_pos      integer  
                                        
                                      )is  
  
  v_1time_maxlength integer; --一次读取的最大长度  
  amount            integer; --总长度  
  v_blob_sub        blob; --一次读取的长度  
  v_index           integer; ---索引  
  v_sub_count       integer;  
  offset            integer;  
  directions2       blob;  
begin  
  
  v_1time_maxlength := 32767; --允许的长度  
  amount            := length(v_blob); --blob的总长度  
  v_sub_count       := amount / v_1time_maxlength + 1; --分成子串的个数  
  v_index           := 1; --索引从1开始  
  offset            := v_pos;  
  directions2       := directions;  
  loop  
    dbms_output.put_line(length(v_blob));    
    
    DBMS_LOB.read(v_blob, v_1time_maxlength, offset, v_blob_sub); --读至v_blob_sub中  
    dbms_lob.writeappend(directions2, length(v_blob_sub), v_blob_sub); --将v_blob_sub中的内容写到字段中  
    v_index := v_index + 1;  
    
    offset := v_index * v_1time_maxlength + 1;  
    exit when v_index > v_sub_count;  
    
  end loop;  
  
  dbms_lob.close(directions2);  
exception  
  when no_data_found then  
    dbms_output.put_line('找不到数据');  
end;  
 
测试代码:
[sql] 
-- Created on 2013-3-8 by ZHANGXL   
declare   
  -- Local variables here  
  i integer;  
  v_blob blob;  
  directions blob;  
  v_post_id number(18):=8814;  
begin  
  select pt.post_text into v_blob from jforum_posts_text pt where pt.post_id=8817;  
  -- Test statements here  
  --execute updateblob(jforum_posts_text,post_id,post_text,8817,0,v_blob);  
   --update jforum_posts_text pt  
    --                       set pt.post_text = EMPTY_BLOB()  
    --                     where pt.post_id = v_post_id;  
  select pt.post_text into directions from jforum_posts_text pt where  pt.post_id=v_post_id for update; --锁住  
  dbms_lob.open(directions, dbms_lob.lob_readwrite);--打开读写流  
    write2blob(directions,v_blob,1);  
  commit;  
end;  
表结构:
[sql] 
-- Create table  
create table JFORUM_POSTS_TEXT  
(  
  POST_ID      NUMBER(18) not null,  
  POST_TEXT    BLOB,  
  POST_SUBJECT VARCHAR2(200),  
  ISDELETED    NUMBER(1) default 0  
)  
tablespace XZFY  
  pctfree 10  
  initrans 1  
  maxtrans 255  
  storage  
  (  
    initial 128  
    minextents 1  
    maxextents unlimited  
  );  
-- Create/Recreate primary, unique and foreign key constraints   
alter table JFORUM_POSTS_TEXT  
  add primary key (POST_ID)  
  using index   
  tablespace XZFY  
  pctfree 10  
  initrans 2  
  maxtrans 255  
  storage  
  (  
    initial 64K  
    minextents 1  
    maxextents unlimited  
  );  
 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,