问题描述
您好-我们正在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创建文件?
提前感谢
-使用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)。
你取一个源斑点并得到一个压缩的结果,例如
然后任何blob都可以通过UTL_FILE写入文件
你取一个源斑点并得到一个压缩的结果,例如
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




