Oracle
 sql >> Datenbank >  >> RDS >> Oracle

APEX:Laden Sie BLOB aus der temporären Tabelle herunter

Versuchen Sie, apex_application.stop_apex_engine nach dem wpg_docload Anruf. Dadurch wird eine weitere Ausgabe von HTTP-Headern vermieden, die möglicherweise Ihren Download vermasseln, da weiterer Apex-Code generiert wird.

  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;

Außerdem, um näher darauf einzugehen:

Ja. Aber nicht unbedingt in deinem Fall. Es ist wichtig, sich daran zu erinnern, wie Apex in Bezug auf Datenbanksitzungen funktioniert. Apex ist zustandslos und arbeitet mit Verbindungspooling. Eine Apex-Sitzung stimmt im Allgemeinen nicht mit einer Datenbanksitzung überein, und Sie können nie garantieren, dass beispielsweise dieselbe Datenbanksitzung zwischen Rendern und Verarbeiten verwendet wird. Dies wird auch kurz in der Dokumentation auf erwähnt Sitzungszustandsverwaltung verstehen , der Einfachheit halber kopiert:

Im Fall einer globalen temporären Tabelle bedeutet dies, dass die Verwendung in vielen Fällen sinnlos ist, da die Daten nur in dieser aktuellen Datenbanksitzung vorhanden sind. Ein Beispiel hierfür wäre, wenn man irgendwo im Onload Daten in eine GTT laden würde, um sie in den After-Submit-Prozessen oder einem Ajax-Aufruf zu verwenden. Sehr wahrscheinlich ist die Tabelle leer.
Apex bietet jedoch eine Alternative in Form von apex_collection , das vorübergehend Daten innerhalb einer bestimmten Apex-Sitzung enthält.