APEX_ZIP: Crea y Descarga Archivos ZIP desde Oracle APEX sin Esfuerzo
Si alguna vez necesitaste que tu aplicación Oracle APEX descargara múltiples archivos de una sola vez, o comprimir reportes dinámicos para tus usuarios, el paquete APEX_ZIP es exactamente lo que estabas buscando.
En este artículo te muestro, con ejemplos reales y listos para usar, cómo sacarle el máximo provecho a esta poderosa API disponible desde Oracle APEX 5.1 y mejorada en la versión 24.2.
¿Qué es APEX_ZIP?
APEX_ZIP es un paquete PL/SQL nativo de Oracle APEX que permite crear, comprimir y descomprimir archivos en formato ZIP directamente desde la base de datos, sin necesidad de herramientas externas, utilidades del sistema operativo ni Java. Todo ocurre dentro del motor de la base de datos Oracle, lo que lo hace extremadamente eficiente y seguro.
El paquete trabaja con tipos de dato BLOB, lo que significa que los archivos ZIP viven completamente en memoria o en tablas de base de datos, y pueden ser descargados mediante botones de descarga de APEX o enviados como adjuntos de correo con APEX_MAIL.
Subprogramas del paquete APEX_ZIP
La API está compuesta por cuatro subprogramas principales que trabajan en conjunto:
| Subprograma | Descripción |
| ADD_FILE | Agrega un archivo (como BLOB) al contenedor ZIP que estás construyendo. |
| FINISH | Finaliza y cierra el archivo ZIP, dejándolo listo en un BLOB para usar. |
| GET_DIR_ENTRIES | Retorna la lista de archivos contenidos dentro de un ZIP existente. |
| GET_FILE_CONTENT | Extrae el contenido de un archivo específico dentro de un ZIP. |
| Nota sobre versiones Las funciones GET_FILES y GET_FILE_CONTENT Signature 1 están marcadas como deprecadas en APEX 24.2. Usa siempre GET_DIR_ENTRIES y GET_FILE_CONTENT Signature 2 para código nuevo. |
Ejemplo 1: Crear un ZIP con múltiples archivos de texto
El caso más básico: generar un archivo ZIP con varios documentos de texto dinámico y ofrecerlo como descarga al usuario.
DECLARE |
| 🔑 Punto clave: rutas dentro del ZIP Nota cómo en p_file_name usamos ‘datos/reporte_ventas.csv’. APEX_ZIP soporta subdirectorios dentro del archivo ZIP, lo que te permite organizar los archivos como si fuera una estructura de carpetas real. |
Ejemplo 2: comprimir documentos PDF desde la base de datos
Un caso muy común en aplicaciones empresariales: el usuario selecciona varios registros de una tabla que contienen PDFs almacenados como BLOB, y descarga todos en un solo ZIP.
-- Botón de descarga masiva de facturas en formato PDF |
Ejemplo 3: Descomprimir un ZIP subido por el usuario
APEX_ZIP también funciona en sentido inverso: puedes procesar un archivo ZIP que el usuario sube mediante un File Browser Item y extraer cada archivo que contiene.
-- Process Row de un File Browse Item (P5_ZIP_FILE) |
Ejemplo 4: Backup automático de tablas en CSV dentro de un ZIP
Un patrón avanzado muy útil para reportes nocturnos o auditorías: generar CSVs de múltiples tablas y empacarlos en un ZIP para almacenamiento o envío por correo.
-- Job nocturno que genera backup de datos en ZIP y lo almacena |
¿Cuándo usar APEX_ZIP? casos de uso reales
Basado en experiencia real con aplicaciones Oracle APEX en entornos productivos, estos son los escenarios donde APEX_ZIP brilla con luz propia:
✅ Exportación masiva de reportes
Cuando un usuario solicita exportar cientos de registros con sus archivos adjuntos, APEX_ZIP los empaca en segundos. Ideal para cierres mensuales, auditorías y generación de expedientes.
✅ Carga masiva de documentos
Los departamentos de captura pueden subir un solo ZIP con decenas de documentos (XML, PDF, imágenes) que la aplicación procesa y distribuye automáticamente en las tablas correctas.
✅ Backups programados desde DBMS_SCHEDULER
Genera snapshots de datos críticos en formato CSV comprimido y almacénalos en la base de datos o envíalos por correo electrónico como adjunto usando APEX_MAIL.
Tips profesionales para usar APEX_ZIP
| ⚡ Tip 1: Siempre libera la memoria temporal Después de usar el ZIP, si no lo estás almacenando en base de datos, llama a DBMS_LOB.freetemporary(l_zip) para liberar la memoria de la SGA. En páginas de alta concurrencia esto es crítico. |
| 🗂️ Tip 2: Usa nombres de archivo con rutas para organización El parámetro p_file_name acepta barras ‘/’ para crear subcarpetas virtuales dentro del ZIP. Usa esta característica para estructurar los archivos: ‘enero/ventas.csv’, ‘enero/compras.csv’. |
| 🔒 Tip 3: Combina con APEX_UTIL.get_blob_file_src para seguridad Si guardas el ZIP en una tabla, puedes controllar quién puede descargarlo usando la autorización de APEX, en lugar de exponer el BLOB directamente mediante una URL. |
| 📧 Tip 4: Adjunta ZIP en correos con APEX_MAIL Usa APEX_MAIL.ADD_ATTACHMENT pasando el BLOB del ZIP con mime_type ‘application/zip’. Perfecto para envío de reportes mensuales de forma automática por DBMS_SCHEDULER. |
Resumen
APEX_ZIP es una de las APIs más versátiles y subestimadas de Oracle APEX. Con solo cuatro subprogramas (ADD_FILE, FINISH, GET_DIR_ENTRIES, GET_FILE_CONTENT) puedes resolver problemas complejos de manejo de archivos de forma elegante, sin depender de nada externo a la base de datos.
Es especialmente poderoso cuando lo combinas con otras APIs del ecosistema APEX como APEX_MAIL, APEX_DATA_EXPORT y APEX_STRING, creando flujos de trabajo completamente automatizados que agregan un valor real a tus aplicaciones empresariales.
¿Ya usabas APEX_ZIP en tus proyectos? Déjame saber en los comentarios qué caso de uso te resultó más útil.
Referencias
📚 Documentación oficial: https://docs.oracle.com/en/database/oracle/apex/24.2/aeapi/APEX_ZIP.html
📚 Oracle APEX 24.2 API Reference — Oracle Corporation
Posts sugeridos
- Cuando usar cada uno de los substitution strings en Oracle APEX Templates
- Tu agente de IA no sabe cuándo parar y eso te va a costar caro
- APEX_ZIP: Crea y Descarga Archivos ZIP desde Oracle APEX sin Esfuerzo
- Oracle APEX Plugins: La guía definitiva de supervivencia
- Domina APEX_JSON en Oracle APEX 24: Genera JSON como un Profesional

Social List