
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 BLOB
- p_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
inline
en 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.