Заархивируйте с помощью хранимой процедуры Oracle

Прямо сейчас я использую служебную процедуру 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.

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


person Adeel Ansari    schedule 10.12.2010    source источник


Ответы (3)


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

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


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

person APC    schedule 10.12.2010
comment
О JSP не может быть и речи, так как все есть в базе данных. Моя процедура PL/SQL извлекает несжатые данные из одной таблицы и записывает сжатые данные в другую таблицу. На следующем этапе удаляются все эти несжатые данные, чтобы сэкономить на стоимости хранения. - person Adeel Ansari; 10.12.2010
comment
Я думал именно об этом, я имею в виду хранимую процедуру Java. Но я никогда раньше не делал ни одного примера, поэтому меня немного беспокоит такая возможность. Услышав нечто подобное от вас, это придало мне уверенности. И теперь, после того, как я придумал очень простой пример, я думаю, что это правильный путь. Большое спасибо за ваш вклад и за ссылки на ценные ресурсы. +1 - person Adeel Ansari; 10.12.2010
comment
Это касается вашего редактирования. NB означает Nota Bene, если я опять не ошибаюсь? ;) - person Adeel Ansari; 10.12.2010
comment
@AdeelAnsari - извините за еще один запутанный инициализм. Думаю, я просто не могу с собой поделать :( - person APC; 10.12.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

person Gary Myers    schedule 10.12.2010
comment
Извините, это была неправильная проблема с копированием/вставкой. Обновил вопрос. UTL_COMPRESS, а в предоставленной вами ссылке указано, что сжатые данные будут совместимы с GZIP. Но то, что я хочу, это стандартная вещь ZIP. Спасибо, что указали на ошибку. - person Adeel Ansari; 10.12.2010
comment
Эта ссылка мертва. - person zygimantus; 27.09.2016

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

person yallie    schedule 26.01.2016