Zip с использованием хранимой процедуры Oracle - PullRequest
7 голосов
/ 10 декабря 2010

Прямо сейчас я использую служебную процедуру Oracle UTL_COMPRESS.LZ_COMPRESS() для сжатия некоторых данных. Но проблема в том, что он сжимает объект, используя GZIP-совместимый формат, который, к сожалению, также не совместим с ZIP. Поэтому встроенная утилита распаковки Windows XP не может открыть ее (вы знаете, что это сжатая папка). И пользователь должен использовать другую утилиту, например 7Zip, Winzip или Filzip и т. Д., Чтобы распаковать ее.

Итак, в итоге у нас есть план получения данных GZIP из Oracle, распаковки их с помощью Java и сжатия их обратно в ZIP (что может быть распаковано утилитой Windows). Это звучит смешно для compress-in-gzip -> decompress -> compress-again-in-zip.

Любая идея, как мы можем сжать его в желаемом формате, во-первых, чтобы избежать всех этих дополнительных вычислений?

Ответы [ 3 ]

8 голосов
/ 10 декабря 2010

Существует пакет Java java.util.zip, который поддерживает формат WinZip. А в Oracle мы можем создавать хранимые процедуры Java, которые представляют классы Java в форме, которая может вызываться собственными программами PL / SQL. Узнать больше .

Итак, вам нужно выписать файл, содержащий данные в несжатом состоянии, а затем передать их через JSP для архивирования. Если вы не хотите писать собственную реализацию, прочитайте эту статью Вадима Лоевски . Он включает хранимую процедуру Java для архивирования файлов ОС.


Примечание. В этом контексте JSP означает Java Stored Процедуру, которая является Java-программой, встроенной в базу данных. Это не то же самое, что Java Server Pages, веб-технология, и, следовательно, более распространенное использование аббревиатуры JSP. Я прошу прощения за любую путаницу.

3 голосов
/ 26 января 2016

as_zip ( сообщение в блоге ) - это собственный пакет PL / SQL для работы с ZIP-архивами.
Он обрабатывает файлы размером до 4 гигабайт (похоже на ограничение исходного формата ZIP).
Пакет написан Антоном Шеффером и имеет лицензию MIT.

3 голосов
/ 10 декабря 2010

UTL_RAW.CAST_TO_RAW - это не какой-либо алгоритм сжатия.Понятия не имею, откуда у вас возникла идея, что это было.RAW (и его большая двоюродная сестра BLOB) просто хранили данные, которые не являются числом, датой или строкой.Вы не хотите хранить двоичные данные в строках, потому что есть вероятность проблем с преобразованием символов.

Правильный пакет PL / SQL для сжатия - UTL_COMPRESS, который использует стандартный алгоритм Лемпеля-Зива.

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

...