Spróbuj dodać apex_application.stop_apex_engine po wpg_docload
połączenie. Pozwoli to uniknąć dalszego wyprowadzania nagłówków HTTP, potencjalnie utrudniając pobieranie, ponieważ generowany jest dalszy kod wierzchołka.
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;
Ponadto, aby omówić:
TAk. Ale niekoniecznie w twoim przypadku. Należy pamiętać, jak działa apex w odniesieniu do sesji bazy danych. Apex jest bezstanowy i działa z pulą połączeń. Sesja wierzchołkowa zazwyczaj nie pasuje do 1 sesji bazy danych i nigdy nie ma gwarancji, że na przykład ta sama sesja bazy danych jest używana między renderowaniem a przetwarzaniem. Jest to również krótko wspomniane w dokumentacji na Zrozumienie zarządzania stanem sesji , skopiowany dla wygody:
W przypadku globalnej tabeli tymczasowej oznacza to, że w wielu przypadkach nie ma sensu jej używać, ponieważ dane będą istniały tylko w tej bieżącej sesji bazy danych. Przykładem tego jest sytuacja, w której można wczytać dane do GTT gdzieś w trakcie obciążenia i użyć ich w procesach po przesłaniu lub wywołaniu ajax. Duża szansa, że stół będzie pusty.
Apex zapewnia jednak alternatywę w postaci apex_collection
, który tymczasowo przechowuje dane w ramach danej sesji wierzchołka.