Plsql 分割blob文件

Plsql 分割blob文件,plsql,oracle11g,Plsql,Oracle11g,我需要从数据库中检索几个大的wave文件,并希望检索到更小的wave文件(约5Mb)。我该怎么办?我已经看到了dbms_lob.read过程,但它返回的最大文件大小为32Kb 问候 procedure extract_blob(p_id in number, wrote_length in out number, chunk out blob) is len_file binary_integer; myblob blob; myname varchar2(255); b

我需要从数据库中检索几个大的wave文件,并希望检索到更小的wave文件(约5Mb)。我该怎么办?我已经看到了dbms_lob.read过程,但它返回的最大文件大小为32Kb

问候

procedure extract_blob(p_id in number, wrote_length in out number, chunk out blob) is
   len_file binary_integer;
   myblob blob;
   myname varchar2(255);
   buffer_length number := 32760;

   begin    
     select file_wav_data, file_wav_name, dbms_lob.getlength(file_wav_data)
     into myblob, myname, lun_file 
     from t_wav 
     where id = p_id;

     if(len_file > wrote_length) then
         dbms_lob.read(myblob,buffer_length,wrote_length+1,chunk);
         wrote_length := wrote_length + buffer_length;
     else wrote_length := -999; --EOF
     end if;
   end;

您可能希望使用临时LOB:

procedure extract_blob(
    p_id in number,
    offset in number,
    chunk_length in out number,
    chunk out blob
) is
    chunk blob;
    wav_data blob;
    full_length number;
    chunk_length number;

begin    
    select file_wav_data, dbms_lob.getlength(file_wav_data)
    into wav_data, full_length
    from t_wav 
    where id = p_id;

    chunk_length := greatest(full_length - offset, 0);
    if chunk_length = 0 then
        return;
    end if;

    dbms_lob.createtemporary(chunk, TRUE);

    dbms_lob.copy(chunk, wav_data, chunk_length, 0, offset);

end extract_blob;

如果可能,您应该在处理完临时LOB后从客户端释放它(使用
DBMS\u LOB.freetimal
)。

DBMS\u LOB.read
返回一个RAW,RAW限制在32kB,因此RAW可能不是正确的格式。您想对这些数据做什么?是否要将数据复制到某个位置?在服务器上?关于客户?…对不起,没有时间为您准备一份电子邮件,但我会给您小费。读取32kb,然后将其写入文件(utl\u fiile.put\u raw),读取下一个32kb,然后将其写入文件。。在循环中这样做,直到你写下你的5MB或blob结束。但是可能会有一个问题,一个wave文件有一个特殊的文件结构(文件的开头和结尾),所以拆分它就不那么容易了——您将得到一个二进制拆分文件。@Vincent。我想开发一个存储过程,其中包含一个BLOB作为输出参数,该参数包含wave文件的一部分。请参阅编辑。@MMM我不能使用utl\u fiile.put\u raw过程,因为我不想将wave文件保存在该文件上system@RoccoJr. 你还没解释这个程序要做什么?是否只提取clob的前N个字节?写这本书的目的是什么?很好的建议,我不得不做一些改变,但你给了我正确的方向。谢谢