7
votes

ZIP utilisant la procédure stockée Oracle

En ce moment, j'utilise la procédure d'utilité Oracle, utl_compress.lz_compress () , pour compresser certaines données. Mais le problème est qu'il comprime la chose à l'aide de format compatible GZIP, qui n'est pas aussi compatible Zip malheureusement. Par conséquent, l'utilitaire de décompression native Windows XP ne peut pas l'ouvrir (vous savez que la caisse de dossier comprimé). Et l'utilisateur doit utiliser un autre utilitaire, comme 7zip , winzip ou filzip etc., afin de décompresser cela.

Donc, nous finissons à avoir un plan de récupération des données GZIP à partir de Oracle, décompressez-le à l'aide de Java et de la compresser à Zip (quelque chose qui peut être décompressé par Windows Utility). Il semble ridicule à compress-in-gzip -> décompressez -> compresse-in-in-zip . .

aucune idée de la façon dont pouvons-nous le comprimer dans le format souhaitable en premier lieu, pour éviter tout calcul supplémentaire?


0 commentaires

3 Réponses :


8
votes

Il y a un package Java java.util.zip qui prend en charge le format WinZip. Et à Oracle, nous pouvons construire des procédures stockées Java qui présentent des classes Java dans une forme qui peut être appelée par des programmes PL / SQL natifs. En savoir plus .

Donc, ce que vous devez faire est d'écrire un fichier contenant les données de son état non compressé, puis de l'alimenter via un JSP pour la glisser. Si vous ne voulez pas écrire votre propre implémentation, consultez Cet article de Vadim Loevski . Il comprend une procédure stockée Java pour la zippation de fichiers OS.


Remarque: Dans ce contexte JSP désigne la procédure stockée Java, qui est un programme Java intégré à la base de données. Ce n'est pas la même chose que les pages de serveur Java, qui est une technologie Web, et donc l'utilisation la plus courante pour l'acronyme JSP. Je m'excuse pour toute confusion donnée.


4 commentaires

JSP est hors de question, comme tout est là dans la base de données. Ma procédure PL / SQL récupère des données non compressées d'une table et rédige les données comprimées à une autre table. Dans l'étape suivante, c'est supprimer toutes ces données non compressées, pour économiser des coûts de stockage.


Je pensais exactement cela, je veux dire sur la procédure stockée Java. Mais je n'ai jamais fait un seul exemple auparavant, cela m'a rendu un peu inquiet de la possibilité. Après avoir entendu la chose la plus similaire de votre part, cela me donne confiance. Et maintenant, après avoir monté un exemple très simple, je pense que c'est la voie à suivre. Merci beaucoup pour votre contribution et pour les liens avec des ressources précieuses. +1


Ceci est en ce qui concerne votre édition. "NB" signifie "nota bene", si je ne me trompe pas encore? ;)


@ADELANSARI - Désolé pour un autre initialisme déroutant. Je suppose que je ne peux tout simplement pas m'en empêcher :(



3
votes

utl_raw.cast_to_raw n'est pas une sorte d'algorithme de compression. Aucune idée où vous avez monté l'idée que c'était. RAW (et son plus grand cousin blob) consistent simplement à stocker des données qui ne sont pas un nombre, la date ou une chaîne. Vous ne voulez pas stocker de données binaires dans les chaînes car il y a une chance de problèmes de conversion de caractère.

Le bon package PL / SQL correct pour la compression est UTL_Compress qui utilise l'algorithme Standard Lempel-ZIV.

http://download.oracle. COM / DOCS / CD / E11882_01 / AppDev.112 / E16760 / U_COMPR.HTM # BGBBCDDI


2 commentaires

Désolé, c'était une mauvaise émission de copie / pâte. Mis à jour la question. utl_compress et le lien que vous avez fourni indique que les données compressées seraient compatibles Gzip. Mais ce que je veux, c'est une chose zip standard. Merci d'avoir souligné l'erreur.


Ce lien est mort.



3
votes

as_zip ( Blog post ) est un package PL / SQL natif pour manipuler les archives zip.
Il gère des fichiers allant jusqu'à 4 gigaoctets (ressemble à la limitation du format zip d'origine).
Le package est écrit par Anton Scheffer et est sous licence de MIT.


0 commentaires