sql >> Base de Datos >  >> RDS >> Oracle

APEX:Descargar BLOB de tabla temporal

Intente agregar apex_application.stop_apex_engine después de wpg_docload llamar. Esto evitará más salidas de encabezados HTTP, lo que podría arruinar su descarga porque se genera más código de vértice.

  owa_util.mime_header( nvl(v_mime,'application/octet'), FALSE );
  htp.p('Content-length: ' || v_length);
  htp.p('Content-Disposition:  attachment; filename="'||replace(replace(substr(v_file_name,instr(v_file_name,'/')+1),chr(10),null),chr(13),null)|| '"');
  owa_util.http_header_close;
  wpg_docload.download_file( Lob_loc );
  apex_application.stop_apex_engine;

Además, para profundizar en:

Sí. Pero no necesariamente en tu caso. Es importante recordar cómo funciona Apex con respecto a las sesiones de la base de datos. Apex no tiene estado y funciona con agrupación de conexiones. Por lo general, una sesión de Apex no coincide con 1 sesión de base de datos y nunca se garantiza que, por ejemplo, se use la misma sesión de base de datos entre la representación y el procesamiento. Esto también se menciona brevemente en la documentación en Descripción de la gestión del estado de la sesión , copiado por conveniencia:

En el caso de una tabla temporal global, esto significa que no tiene sentido usarla en muchos casos, ya que los datos solo existirán en esa sesión actual de la base de datos. Un ejemplo de esto es donde uno cargaría datos en un GTT en algún lugar de la carga y los medios para usarlos en los procesos posteriores al envío o una llamada ajax. Es muy probable que la tabla esté vacía.
Apex, sin embargo, ofrece una alternativa en forma de apex_colección , que retendrá temporalmente los datos dentro de una sesión de ápice determinada.