Prøv at tilføje apex_application.stop_apex_engine efter wpg_docload
opkald. Dette vil undgå yderligere output af HTTP-headere, hvilket potentielt ødelægger din download, fordi der genereres yderligere apex-kode.
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;
Desuden for at uddybe :
Ja. Men ikke nødvendigvis i dit tilfælde. Det er vigtigt at huske, hvordan apex fungerer med hensyn til databasesessioner. Apex er tilstandsløst og arbejder med forbindelsespooling. En apex-session matcher generelt ikke 1 databasesession, og du er aldrig garanteret, at for eksempel den samme databasesession bruges mellem gengivelse og behandling. Dette er også kort nævnt i dokumentationen på Forstå Session State Management , kopieret for nemheds skyld:
I tilfælde af en global midlertidig tabel betyder det, at den i mange tilfælde er meningsløs at bruge, da data kun vil eksistere i den aktuelle databasesession. Et eksempel på dette er, hvor man ville indlæse data i en GTT et sted i onloaden og midler til at bruge dem i efter-submit-processerne eller et ajax-opkald. Stor chance for, at bordet er tomt.
Apex tilbyder dog et alternativ i form af apex_collection
, som midlertidigt vil opbevare data inden for en given apex-session.