2010-12-10 125 views
7

Ahora estoy usando el procedimiento de utilidad de Oracle, UTL_COMPRESS.LZ_COMPRESS(), para comprimir algunos datos. Pero el problema es que comprime la cosa usando un formato compatible con GZIP, que lamentablemente no es compatible con ZIP. Por lo tanto, la utilidad de descompresión nativa de Windows XP no puede abrirlo (ya conoce esa cosa de carpeta comprimida). Y el usuario tiene que usar alguna otra utilidad, como 7Zip, Winzip, o Filzip, etc., para descomprimir eso.Zip usando Oracle Stored Procedure

Así que terminamos teniendo un plan para recuperar datos GZIP de Oracle, descomprimirlos usando Java y comprimirlos nuevamente en ZIP (algo que la utilidad de Windows puede descomprimir). Suena ridículo para compress-in-gzip -> decompress -> compress-again-in-zip.

¿Alguna idea de cómo podemos comprimirla en el formato deseado en primer lugar, para evitar todo este cálculo extra?

Respuesta

8

Hay un paquete de Java java.util.zip que admite el formato WinZip. Y en Oracle podemos construir procedimientos almacenados en Java que presentan clases de Java en una forma que los programas nativos PL/SQL pueden invocar. Find out more.

Entonces, lo que necesita hacer es escribir un archivo que contenga los datos en su estado descomprimido y luego pasarlo a través de un JSP para comprimirlo. Si no desea escribir su propia implementación, consulte this article by Vadim Loevski. Incluye un procedimiento almacenado de Java para comprimir archivos del sistema operativo.


Nota: En este contexto, JSP significa Java Stored Procedure, que es un programa Java incrustado en la base de datos. No es lo mismo que Java Server Pages, que es una tecnología web, y de ahí el uso más común para el acrónimo JSP. Me disculpo por cualquier confusión dada.

+0

JSP está fuera de lugar, ya que todo está allí en la base de datos. Mi procedimiento PL/SQL es recuperar datos sin comprimir de una tabla y escribir los datos comprimidos en otra tabla. En el siguiente paso, eliminar todos los datos sin comprimir para ahorrar en costos de almacenamiento. –

+0

Estaba pensando exactamente esto, me refiero a Java Stored Procedure. Pero nunca antes había hecho un solo ejemplo, eso me hizo estar un poco preocupado por la posibilidad. Después de escuchar algo similar de ti, me da confianza. Y ahora, después de proponer un ejemplo muy simple, creo que este es el camino a seguir. Muchas gracias por su aporte y por los enlaces a recursos valiosos. +1 –

+0

Esto está relacionado con su edición. "NB" significa "Nota Bene", si no estoy equivocado de nuevo? ;) –

3

UTL_RAW.CAST_TO_RAW no es ningún tipo de algoritmo de compresión. No tengo idea de dónde se te ocurrió la idea de que así fuera. RAW (y su primo BLOB más grande) son simplemente almacenar datos que no son un número, fecha o cadena. No desea almacenar datos binarios en cadenas porque existe la posibilidad de problemas de conversión de caracteres.

El paquete PL/SQL correcto para la compresión es UTL_COMPRESS que utiliza el algoritmo estándar de Lempel-Ziv.

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

+0

Lo siento, fue un problema de copiar/pegar incorrectamente. Actualicé la pregunta.'UTL_COMPRESS' y el enlace que proporcionó indica que los datos comprimidos serían compatibles con GZIP. Pero lo que quiero es una cosa ZIP estándar. Gracias por señalar el error. –

+0

Muchas gracias de nuevo, por señalar eso. +1 –

+0

Ese enlace está muerto. – zygimantus

3

as_zip (blog post) es un paquete/PL SQL nativo para manipular archivos ZIP.
Maneja archivos de hasta 4 gigabytes (parece una limitación del formato ZIP original).
El paquete está escrito por Anton Scheffer y tiene licencia de MIT.

Cuestiones relacionadas