现在我使用Oracle实用程序UTL_COMPRESS.LZ_COMPRESS()
来压缩一些数据。但问题是它使用GZIP兼容格式压缩物品,遗憾的是它不兼容ZIP。因此,Windows XP本机解压缩实用程序无法打开它(您知道压缩文件夹thingie)。并且用户必须使用其他实用程序,例如7Zip
,Winzip
或Filzip
等,以便对其进行解压缩。
因此,我们最终计划从Oracle检索GZIP数据,使用Java解压缩,然后将其压缩回ZIP(可以通过Windows实用程序解压缩)。这对compress-in-gzip -> decompress -> compress-again-in-zip
来说听起来很荒谬。
任何想法我们怎么能首先以理想的格式压缩它,以避免所有这些额外的计算?
答案 0 :(得分:8)
有一个支持WinZip格式的Java包java.util.zip
。在Oracle中,我们可以构建java存储过程,以一种可由本机PL / SQL程序调用的形式呈现Java类。 Find out more
所以你需要做的是写出一个包含未压缩状态数据的文件,然后通过JSP提供它来压缩它。如果您不想编写自己的实现,请查看this article by Vadim Loevski。它包括用于压缩OS文件的Java存储过程。
注意:在此上下文中,JSP表示Java存储过程,它是嵌入在数据库中的Java程序。它与作为Web技术的Java Server Pages不同,因此是JSP首字母缩略词的更常见用法。对于给出的任何混淆,我道歉。
答案 1 :(得分:3)
UTL_RAW.CAST_TO_RAW不是任何类型的压缩算法。不知道你在哪里提出它的想法。 RAW(及其较大的堂兄BLOB)只是存储不是数字,日期或字符串的数据。您不希望将二进制数据存储在字符串中,因为可能存在字符转换问题。
用于压缩的正确PL / SQL包是UTL_COMPRESS,它使用标准的Lempel-Ziv算法。
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/u_compr.htm#BGBBCDDI
答案 2 :(得分:3)
as_zip(blog post)是一个用于操作ZIP压缩文件的原生PL / SQL包。
它处理高达4千兆字节的文件(看起来像原始ZIP格式的限制)
该软件包由Anton Scheffer编写,并获得MIT许可。