Prova ad aggiungere apex_application.stop_apex_engine dopo il wpg_docload
chiamata. Ciò eviterà ulteriore output di intestazioni HTTP, potenzialmente rovinando il download perché viene generato ulteriore codice apice.
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;
Inoltre, per approfondire :
Sì. Ma non necessariamente nel tuo caso. È importante ricordare come funziona Apex per quanto riguarda le sessioni del database. Apex è senza stato e funziona con il pool di connessioni. Una sessione Apex generalmente non corrisponde a 1 sessione di database e non è mai garantito che, ad esempio, venga utilizzata la stessa sessione di database tra il rendering e l'elaborazione. Questo è anche brevemente menzionato nella documentazione su Comprensione della gestione dello stato della sessione , copiato per comodità:
Nel caso di una tabella temporanea globale, ciò significa che è inutile utilizzarla in molti casi poiché i dati esisteranno solo in quella sessione di database corrente. Un esempio di ciò è dove si caricano i dati in un GTT da qualche parte nell'onload e si intende utilizzarli nei processi di post-invio o in una chiamata ajax. È molto probabile che il tavolo sia vuoto.
Apex fornisce tuttavia un'alternativa sotto forma di raccolta_apex
, che conterrà temporaneamente i dati all'interno di una determinata sessione apicale.