Zip с использованием хранимой процедуры Oracle

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

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

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

3 ответов


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

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


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


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


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