Coba tambahkan apex_application.stop_apex_engine setelah wpg_docload
panggilan. Ini akan menghindari keluaran lebih lanjut dari header HTTP, yang berpotensi mengacaukan unduhan Anda karena kode apex lebih lanjut dihasilkan.
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;
Selanjutnya, untuk menguraikan :
Ya. Tetapi belum tentu dalam kasus Anda. Penting untuk diingat bagaimana apex bekerja sehubungan dengan sesi database. Apex tidak memiliki status dan berfungsi dengan penyatuan koneksi. Sesi apex umumnya tidak cocok dengan 1 sesi database, dan Anda tidak pernah dijamin bahwa, misalnya, sesi database yang sama digunakan antara render dan pemrosesan. Ini juga disebutkan secara singkat dalam dokumentasi di Memahami Manajemen Status Sesi , disalin untuk kenyamanan:
Dalam kasus tabel sementara global ini berarti bahwa tidak ada gunanya digunakan dalam banyak kasus karena data hanya akan ada di sesi database saat ini. Contohnya adalah di mana seseorang akan memuat data dalam GTT di suatu tempat di onload dan berarti menggunakannya dalam proses setelah pengiriman atau panggilan ajax. Besar kemungkinan tabel akan kosong.
Apex memberikan alternatif berupa apex_collection
, yang sementara akan menyimpan data dalam sesi puncak tertentu.