使用 PL/SQL 为 APEX 生成下载

问题描述 投票:0回答:1

我正在使用 Oracle Apex,我想在我的页面上添加一个下载文件的按钮,但该文件不会保存在银行中,我会生成具有特定内容的文件。例如,我可以吗,生成一个文件保存到临时目录,然后用PL/SQL下载?

我找到了如何生成一个文件并将其保存在

TMP_DIR
中,我想它看起来像这样:

DECLARE
    l_file UTL_FILE.FILE_TYPE;
    l_file_content VARCHAR2(100) := 'example text, example text...';
BEGIN
    l_file := UTL_FILE.FOPEN('TMP_DIR', 'my_file.txt', 'W');

    UTL_FILE.PUT_LINE(l_file, l_file_content);
    UTL_FILE.FCLOSE(l_file);
END;

但是,我无法下载此文件,我找到了一些提示和解释,但它们在我的情况下不起作用,因为此文件不是来自我银行的表。例如,我可以将此执行添加到 APEX 中的按钮来下载

TMP_DIR
的文件吗?

该文件不是来自银行,我什至不想将其保存在银行中,使用银行中任何数据的唯一情况是定义文件的内容。

oracle plsql oracle-apex
1个回答
0
投票

您可能已经见过很多获取 BLOB 并让您下载的示例,例如

procedure get_file (p_file  in varchar2) is
  l_blob  my_files.blob_content%type;
  l_mime  my_files.mime_type%type;
begin
  select blob_content, mime_type
  into   l_blob, l_mime
  from   my_files
  where  file_name = p_file;

  htp.init;
  owa_util.mime_header(l_mime, false);
  htp.p('content-length: ' || dbms_lob.getlength(l_blob));
  htp.p('content-disposition: filename="' || p_file || '"');
  owa_util.http_header_close;

  wpg_docload.download_file(l_blob);
  apex_application.stop_apex_engine;
end;

由于您的源是一个平面文件,因此它只是一个小的编辑,即

l_blob := to_blob(bfilename('YOUR_DIR','your_file'));

你应该可以走了

© www.soinside.com 2019 - 2024. All rights reserved.