Oracle APEX - 将隐藏的 SQL 查询下载到 CSV 中
Oracle APEX - Download hidden SQL query into CSV
我正在尝试在我的应用程序的页面上创建一个按钮,该按钮将下载我引用的完整 table CSV 文件。我无法使用交互式报告 > 操作 > 下载 CSV,因为交互式报告有隐藏的列。我需要 all 列来填充 CSV 文件。
有没有办法创建 SQL 脚本并在按钮中引用它?
我已经尝试了此 link 中引用的步骤: 但它无济于事,因为我的查询将包含隐藏在交互式报表中的列。
欢迎使用 Whosebug!
一个灵活的选择是使用应用程序进程,在共享组件中定义(进程点 = ajax 回调)。
像这样:
declare
lClob clob;
lBlob blob;
lFilename varchar2(250) := 'filename.csv';
begin
lClob := UNISTR('\FEFF'); -- was necessary for us to be able to use the files in MS Excel
lClob := lClob || 'Tablespace Name;Table Name;Number of Rows' || utl_tcp.CRLF;
for c in (select tablespace_name, table_name, num_rows from user_tables where rownum <= 5)
loop
lClob := lClob || c.tablespace_name || ';' || c.table_name || ';' || c.num_rows || utl_tcp.CRLF;
end loop;
lBlob := fClobToBlob(lClob);
sys.htp.init;
sys.owa_util.mime_header('text/csv', false);
sys.htp.p('Conent-length: ' || dbms_lob.getlength(lBlob));
sys.htp.p('Content-Disposition: attachment; filename = "' || lFilename || '"');
sys.htp.p('Cache-Control: no-cache, no-store, must-revalidate');
sys.htp.p('Pragma: no-cache');
sys.htp.p('Expires: 0');
sys.owa_util.http_header_close;
sys.wpg_docload.download_file(lBlob);
end;
这是函数 fClobToBlob:
create function fClobToBlob(aClob CLOB) RETURN BLOB IS
tgt_blob BLOB;
amount INTEGER := DBMS_LOB.lobmaxsize;
dest_offset INTEGER := 1;
src_offset INTEGER := 1;
blob_csid INTEGER := nls_charset_id('UTF8');
lang_context INTEGER := DBMS_LOB.default_lang_ctx;
warning INTEGER := 0;
begin
if aClob is null then
return null;
end if;
DBMS_LOB.CreateTemporary(tgt_blob, true);
DBMS_LOB.ConvertToBlob(tgt_blob, aClob, amount, dest_offset, src_offset, blob_csid, lang_context, warning);
return tgt_blob;
end fClobToBlob;
在页面上,您需要将按钮操作设置为 "Redirect to Page in this Application",目标页面设置为“0”。在 "Advanced" 下,将 Request 设置为 "APPLICATION_PROCESS=downloadCSV",其中 downloadCSV
是您的应用程序进程的名称。
如果您需要参数化您的流程,您可以通过访问您的申请流程中的页面项目或申请项目来实现。
生成 CSV 数据可能很麻烦,但有几个软件包可以使它更容易。 alexandria 包就是其中之一:
https://github.com/mortenbra/alexandria-plsql-utils
有关如何使用 CSV 包的示例如下:
https://github.com/mortenbra/alexandria-plsql-utils/blob/master/demos/csv_util_pkg_demo.sql
我正在尝试在我的应用程序的页面上创建一个按钮,该按钮将下载我引用的完整 table CSV 文件。我无法使用交互式报告 > 操作 > 下载 CSV,因为交互式报告有隐藏的列。我需要 all 列来填充 CSV 文件。
有没有办法创建 SQL 脚本并在按钮中引用它?
我已经尝试了此 link 中引用的步骤:
欢迎使用 Whosebug!
一个灵活的选择是使用应用程序进程,在共享组件中定义(进程点 = ajax 回调)。 像这样:
declare
lClob clob;
lBlob blob;
lFilename varchar2(250) := 'filename.csv';
begin
lClob := UNISTR('\FEFF'); -- was necessary for us to be able to use the files in MS Excel
lClob := lClob || 'Tablespace Name;Table Name;Number of Rows' || utl_tcp.CRLF;
for c in (select tablespace_name, table_name, num_rows from user_tables where rownum <= 5)
loop
lClob := lClob || c.tablespace_name || ';' || c.table_name || ';' || c.num_rows || utl_tcp.CRLF;
end loop;
lBlob := fClobToBlob(lClob);
sys.htp.init;
sys.owa_util.mime_header('text/csv', false);
sys.htp.p('Conent-length: ' || dbms_lob.getlength(lBlob));
sys.htp.p('Content-Disposition: attachment; filename = "' || lFilename || '"');
sys.htp.p('Cache-Control: no-cache, no-store, must-revalidate');
sys.htp.p('Pragma: no-cache');
sys.htp.p('Expires: 0');
sys.owa_util.http_header_close;
sys.wpg_docload.download_file(lBlob);
end;
这是函数 fClobToBlob:
create function fClobToBlob(aClob CLOB) RETURN BLOB IS
tgt_blob BLOB;
amount INTEGER := DBMS_LOB.lobmaxsize;
dest_offset INTEGER := 1;
src_offset INTEGER := 1;
blob_csid INTEGER := nls_charset_id('UTF8');
lang_context INTEGER := DBMS_LOB.default_lang_ctx;
warning INTEGER := 0;
begin
if aClob is null then
return null;
end if;
DBMS_LOB.CreateTemporary(tgt_blob, true);
DBMS_LOB.ConvertToBlob(tgt_blob, aClob, amount, dest_offset, src_offset, blob_csid, lang_context, warning);
return tgt_blob;
end fClobToBlob;
在页面上,您需要将按钮操作设置为 "Redirect to Page in this Application",目标页面设置为“0”。在 "Advanced" 下,将 Request 设置为 "APPLICATION_PROCESS=downloadCSV",其中 downloadCSV
是您的应用程序进程的名称。
如果您需要参数化您的流程,您可以通过访问您的申请流程中的页面项目或申请项目来实现。
生成 CSV 数据可能很麻烦,但有几个软件包可以使它更容易。 alexandria 包就是其中之一: https://github.com/mortenbra/alexandria-plsql-utils
有关如何使用 CSV 包的示例如下: https://github.com/mortenbra/alexandria-plsql-utils/blob/master/demos/csv_util_pkg_demo.sql