使用Oracle生成ZIP文件
问题
在Oracle数据库中生成ZIP文件。
解决方案
UTL_COMPRESS包。
实现效果:
1、将多段数据压缩到一个ZIP文件中,此ZIP文件中只有一个文件。
2、将一个表中的多个Blob字段添加到一个ZIP文件中,此ZIP文件中包含多个文件。
准备工作:
1、创建存放非压缩文件的表files:
create table FILES
(
name VARCHAR2(256 CHAR) not null,
content BLOB
);
2、向files中插入测试数据:这里随意插入了一个HTML文件和一个JPG文件。
3、创建存放压缩文件的表:TEST_ZIP_TABLE
create table TEST_ZIP_TABLE
(
name VARCHAR2(256 CHAR) not null,
content BLOB
)
将多段数据压缩到一个ZIP文件中,此ZIP文件中只有一个文件
过程如下:
1、使用utl_compress.lz_compress_open关联一个Blob变量,返回一个handler。
2、使用utl_compress.lz_compress_add将需要压缩的内容压入Blob变量中。
3、使用utl_compress.lz_compress_close关闭压缩文件。
4、将压缩文件insert到TEST_ZIP_TABLE中。
将以上过程实现为存储过程,如下:
create or replace procedure TEST_UTL_ZIP_1 is
v_compressed blob;
v_handle binary_integer;
begin
dbms_lob.createtemporary (v_compressed, false);
v_handle := utl_compress.lz_compress_open (v_compressed);
for v_i in 1 .. 100
loop
utl_compress.lz_co