因爲公司使用了Oracle APEX構建應用,且在APEX新版本v20.2版本中加強了相關報表導出數據相關功能;正好如今作的事情也須要相似的功能,就先來學習一下Oracle的APEX相關功能及實現方式;爲本身優化實現相關功能作些積累吧。html
先簡單介紹下APEX是什麼?sql
APEX:Oracle Application Express (APEX) 是低代碼開發平臺。藉助該平臺,您能夠構建功能先進的可擴展安全企業應用,而且可在任何位置部署應用。express
使用 APEX,開發人員可快速開發並部署出色的應用,從而解決實際問題並當即創造價值。您無需精通各類技術,就能夠提供高級解決方案。您只需集中精力解決業務問題,其餘工做均可以交給 Oracle APEX 來處理。編程
v20.2版本導出數據優化點:api
如須要使用可在如下的地址申請工做區:安全
申請免費工做區地址:session
https://apex.oracle.com/pls/apex/f?p=4700:2:10115035671324:::RP::oracle
1、普通表導出、打印實現app
進入:SQL工做室->實用程序->示例數據集->【EMP/DEPT】數據安裝ide
進入:應用程序構建器->建立->新建應用程序->建立應用程序;建立完成以下圖
進入應用程序:進入主頁設計:添加經典報表元素->綁定數據表->支持導出和打印功能->進行打印設置:打印成Excel
運行效果以下,點擊導出時導出該表csv文件內容;打印時輸出該表對於html內容
2、交互式報表導出、打印
3、調用APEX提供API實現:
在上面示例中添加按鈕調用:Export_Data接口實現數據導出
執行代碼爲如下內容:
DECLARE l_export apex_data_export.t_export; l_region_id number; BEGIN SELECT region_id into l_region_id FROM apex_application_page_regions WHERE application_id = 36324--(應用程序ID) and page_id = 1--(頁碼id) and static_id = 'EXRep'--(區域靜態id-交互式報表需指定該id); l_export := apex_region.export_data ( p_format => apex_data_export.c_format_html, p_page_id => 1, p_region_id => l_region_id ); apex_data_export.download( l_export ); END;
修改頁面提交從新加載:
運行效果:
本次使用API服務來測試該接口功能:SQL工做室->RESTful服務->模塊->建立模塊(export)
建立模板和處理方法:
添加執行腳本:
DECLARE l_context apex_exec.t_context; l_export apex_data_export.t_export; BEGIN apex_session.create_session ( p_app_id => 36324, p_page_id => 1, p_username => 'EXAMPLE USER' ); l_context := apex_exec.open_query_context( p_location => apex_exec.c_location_local_db, p_sql_query => 'select * from emp' ); l_export := apex_data_export.export ( p_context => l_context, p_format => apex_data_export.c_format_pdf ); apex_exec.close( l_context ); apex_data_export.download( p_export => l_export ); EXCEPTION when others THEN apex_exec.close( l_context ); raise; END;
導出接口方法參數說明:
參數 | 描述 |
---|---|
p_context |
來自EXEC基礎結構的上下文對象。 |
p_format |
導出格式。有效值爲:XLSX,PDF,HTML,CSV,XML和JSON。 |
p_as_clob |
導出爲CLOB而不是BLOB(默認爲FALSE)。 |
p_columns |
以分列符開始的列屬性集合,而後按顯示順序。 |
p_column_groups |
按級別和顯示順序收集列組屬性。 |
p_aggregates |
報告彙總的集合。 |
p_highlights |
收集報告要點。 |
p_file_name |
定義導出的文件名。 |
p_print_config |
用於EXCEL和PDF設置打印屬性。 |
p_page_header |
文本顯示在文檔的標題部分。覆蓋的頁面標題p_print_config 。 |
p_page_footer |
文本顯示在文檔的頁腳部分。覆蓋的頁面頁腳p_print_config 。 |
p_supplemental_text |
全部下載格式頂部的文本。 |
p_csv_enclosed_by |
用於CSV以封裝輸出。 |
p_csv_separator |
用於CSV以分隔列值。 |
p_pdf_accessible |
用於PDF以建立可訪問的PDF。 |
p_xml_include_declaration |
用於XML以生成XML聲明做爲第一行。 |
經過簡單使用感受APEX功能比較完善,能快速的構建出業務應用;導出接口功能比較完善,支持靈活。
對於本身實現相關導出功能有參考價值。
參考資料:
https://blogs.oracle.com/apex/exploring-report-printing-in-apex-202
https://docs.oracle.com/en/database/oracle/application-express/20.2/aeapi/APEX_DATA_EXPORT-EXPORT-Function.html#GUID-6109A537-50C4-4FB2-8414-7A554B19EC8E