Zkuste přidat apex_application.stop_apex_engine po wpg_docload
volání. Vyhnete se tak dalšímu výstupu HTTP hlaviček, což by mohlo zkazit stahování, protože se generuje další apex kód.
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;
Dále k upřesnění:
Ano. Ale ne nutně ve vašem případě. Je důležité si pamatovat, jak funguje apex s ohledem na databázové relace. Apex je bezstavový a pracuje s poolingem připojení. Relace vrcholu se obecně neshoduje s 1 relací databáze a nikdy nemáte zaručeno, že například mezi vykreslením a zpracováním bude použita stejná relace databáze. Toto je také krátce zmíněno v dokumentaci na Pochopení správy stavu relace , pro usnadnění zkopírováno:
V případě globální dočasné tabulky to znamená, že je v mnoha případech zbytečné, protože data budou existovat pouze v této aktuální databázové relaci. Příkladem je situace, kdy by člověk načítal data v GTT někde v onload a chtěl je použít v procesech po odeslání nebo volání ajax. Velká šance, že stůl bude prázdný.
Apex však poskytuje alternativu ve formě apex_collection
, který bude dočasně uchovávat data v rámci dané vrcholové relace.