Descarga archivos Oracle APEX con APEX_HTTP.DOWNLOAD
Introducción
¿Alguna vez intentaste descargar un archivo desde Oracle APEX y terminaste complicándote con tipos MIME, headers o conversiones BLOB/CLOB?
Oracle APEX 24.2 simplifica este proceso con el poderoso procedimiento APEX_HTTP.DOWNLOAD. Esta utilidad te permite enviar archivos desde PL/SQL directamente al navegador, sin hacks, sin JavaScript, sin complicaciones.
En este artículo:
- Te explico qué hace y cómo funciona
APEX_HTTP.DOWNLOAD - Verás un ejemplo empresarial para descargar un PDF generado dinámicamente
- Conocerás errores comunes y cómo evitarlos
Este artículo es útil para desarrolladores Oracle APEX, arquitectos y especialistas en backend que necesitan descargar archivos en sus apps sin depender de ORDS ni librerías externas.
Tabla de Contenido
- ¿Qué es
APEX_HTTP.DOWNLOAD? - Sintaxis y parámetros clave
- Ejemplo real: descarga de contrato PDF
- Consideraciones especiales (MIME, CLOB)
- Buenas prácticas
- Conclusión y recurso extra
1. ¿Qué es APEX_HTTP.DOWNLOAD?
Es un procedimiento del paquete APEX_HTTP que permite enviar directamente un archivo desde Oracle APEX al navegador del usuario.
Este procedimiento es ideal cuando necesitas entregar archivos generados dinámicamente o almacenados en BLOB/CLOB en la base de datos.
No necesitas ORDS, ni htp.p, ni owa_util.mime_header manuales.
2. Sintaxis y parámetros clave
APEX_HTTP.DOWNLOAD(
p_content_disposition IN VARCHAR2,
p_mime_type IN VARCHAR2,
p_content IN BLOB,
p_filename IN VARCHAR2 DEFAULT NULL);
p_content_disposition:'inline'o'attachment'p_mime_type: tipo MIME, ej.'application/pdf'p_content: el archivo en formato BLOBp_filename: nombre opcional del archivo a descargar
3. Ejemplo real: descarga de contrato PDF
Supón que tienes una tabla CONTRATOS con archivos en formato BLOB:
CREATE TABLE contratos (
id NUMBER PRIMARY KEY,
cliente VARCHAR2(100),
archivo_pdf BLOB,
nombre_archivo VARCHAR2(255),
mime_type VARCHAR2(100)
);
Creamos una página APEX con botón de descarga y un proceso PL/SQL tipo “Submit”:
DECLARE
l_blob BLOB;
l_mime VARCHAR2(100);
l_nombre VARCHAR2(255);
BEGIN
SELECT archivo_pdf, mime_type, nombre_archivo
INTO l_blob, l_mime, l_nombre
FROM contratos
WHERE id = :P1_ID_CONTRATO;
APEX_HTTP.DOWNLOAD (
p_content_disposition => 'attachment',
p_mime_type => l_mime,
p_content => l_blob,
p_filename => l_nombre
);
END;
🎯 Resultado: al presionar el botón, el navegador descarga el archivo con su nombre real y tipo correcto.
4. Consideraciones especiales (MIME, CLOB)
- Si el contenido es CLOB, primero conviértelo a BLOB:
FUNCTION clob_to_blob(p_clob IN CLOB) RETURN BLOB IS
l_blob BLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(l_blob, TRUE);
DBMS_LOB.CONVERTTOBLOB(l_blob, p_clob, DBMS_LOB.LOBMAXSIZE, 1, 1);
RETURN l_blob;
END;
- Usa el MIME correcto. Ejemplos:
- PDF →
application/pdf - Excel →
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - Imagen PNG →
image/png
- PDF →
- Para contenido visual como imágenes o PDF, puedes usar
inlineen lugar deattachment.
5. Buenas prácticas
✅ Siempre valida que el BLOB exista antes de ejecutar DOWNLOAD.
✅ Usa headers MIME correctos según el tipo de archivo.
✅ Incluye un botón claro con ícono o texto explicativo.
✅ Nunca descargues datos sensibles sin control de sesión/rol.
✅ Audita las descargas si son parte de un proceso legal o de cumplimiento.
6. Conclusión
APEX_HTTP.DOWNLOAD es una herramienta poderosa y elegante para descargar archivos desde tus aplicaciones APEX sin esfuerzo.
Con unas pocas líneas de código puedes ofrecer:
- Contratos
- Facturas
- Reportes
- Imágenes
- Archivos ZIP generados
Es parte del toolbox moderno de cualquier desarrollador APEX.
🎓 ¿Quieres aprender más?
Accede al módulo completo de manejo de archivos, PDF y CLOBs en Oracle APEX aquí:
👉 Ver curso en Aprendiz Academy
Incluye ejercicios paso a paso, integración con ORDS y generación de reportes con PL/SQL.

Social List