7

现在我正在使用 Oracle 实用程序UTL_COMPRESS.LZ_COMPRESS(),来压缩一些数据。但问题是它使用 GZIP 兼容格式压缩东西,不幸的是,它也不兼容 ZIP。因此,Windows XP 原生解压实用程序无法打开它(你知道压缩文件夹的东西)。并且用户必须使用其他一些实用程序,如7ZipWinzipFilzip等,才能解压缩它。

因此,我们最终制定了从 Oracle 检索 GZIP 数据的计划,使用 Java 对其进行解压缩,然后将其压缩回 ZIP(可以通过 Windows 实用程序解压缩的东西)。这听起来很荒谬compress-in-gzip -> decompress -> compress-again-in-zip

知道我们如何首先以理想的格式压缩它,以避免所有这些额外的计算吗?

4

3 回答 3

8

There is a Java package java.util.zip which supports the WinZip format. And in Oracle we can build java stored procedures which present Java classes in a form which can be called by native PL/SQL programs. Find out more.

So what you need to do is write out a file containing the data in its uncompressed state and then feed it through a JSP to zip it. If you don't want to write your own implementation then check out this article by Vadim Loevski. It includes a Java Stored Procedure for zipping OS files.


Note: In this context JSP means Java Stored Procedure, which is a Java program embedded in the database. It is not the same as Java Server Pages, which is a web technology, and hence the more common usage for the JSP acronym. I apologise for any confusion given.

于 2010-12-10T04:58:11.190 回答
3

UTL_RAW.CAST_TO_RAW 不是任何类型的压缩算法。不知道你是从哪里想到它的。RAW(及其更大的表亲 BLOB)只是用于存储不是数字、日期或字符串的数据。您不想将二进制数据存储在字符串中,因为可能会出现字符转换问题。

用于压缩的正确 PL/SQL 包是使用标准 Lempel-Ziv 算法的 UTL_COMPRESS。

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/u_compr.htm#BGBBCDDI

于 2010-12-10T07:02:13.423 回答
3

as_zip ( blog post ) 是一个用于操作 ZIP 档案的原生 PL/SQL 包。
它可以处理高达 4 GB 的文件(看起来像是原始 ZIP 格式的限制)。
该软件包由Anton Scheffer编写,并获得 MIT 许可。

于 2016-01-26T13:32:47.003 回答