暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将压缩的BLOB保存到操作系统文件

ASKTOM 2020-07-29
657

问题描述

您好-我们正在oracle数据库中进行跟踪

-使用SQL查询从Siebel数据库中提取逗号分隔文件
-我们使用BLOB来存储逗号分隔的文件
-使用UTL_compress LN_COMPRESS压缩BLOB数据
-使用HTTP post将数据发送到REST API


REST服务由于Oracle压缩而出错,无法读取oracle压缩数据。顺便说一句,当我使用winzip手动压缩文件并使用邮递员发布时,这很好。

REST API所有者想知道Oracle UTL_compress压缩规范。还有要求发送操作系统文件 (oracle压缩文件)

需要知道以下内容...

1) Oracle对UTL_COMPRESS使用什么规范
2) 如何使用Oracle comresed blob创建文件?

提前感谢

专家解答

UTL_COMPRESS使用LZ压缩 (相当于gzip)。

你取一个源斑点并得到一个压缩的结果,例如

declare
    l_log_blob blob;
    l_uncompressed_blob    blob;
begin
        l_uncompressed_blob := ...

        dbms_lob.createtemporary(l_log_blob,true);

        utl_compress.lz_compress (src => l_uncompressed_blob,
                                  dst => l_log_blob);


        dbms_lob.freetemporary(l_log_blob);
        dbms_lob.freetemporary(l_uncompressed_blob);

end;
/


然后任何blob都可以通过UTL_FILE写入文件

declare
  l_gzip      utl_file.file_type;
  l_piece     raw(32767);
  l_chunklen  number := 32767;
  l_idx       integer := 1;
  l_blob_len  integer;
begin

  l_blob_len := dbms_lob.getlength(l_log_blob);
  
  l_gzip := utl_file.fopen('blob_dir','myfile.dat.gz','wb', 32767);

  while l_idx <= l_blob_len loop
    dbms_lob.read(l_log_blob, l_chunklen, l_idx, l_piece);
    utl_file.put_raw(l_gzip, l_piece, true);
    l_idx := l_idx + l_chunklen;
  end loop;
  
  utl_file.fclose(l_gzip);
  
end;



文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论