前言:
由於公司使用了Oracle APEX構建應用,且在APEX新版本v20.2版本中增強了相關報表匯出資料相關功能;正好現在做的事情也需要類似的功能,就先來學習一下Oracle的APEX相關功能及實現方式;為自己優化實現相關功能做些積累吧。
先簡單介紹下APEX是什麼?
APEX是什麼:
APEX:Oracle Application Express (APEX) 是低程式碼開發平臺。藉助該平臺,您可以構建功能先進的可擴充套件安全企業應用,並且可在任何位置部署應用。
使用 APEX,開發人員可快速開發並部署出色的應用,從而解決實際問題並立即創造價值。您無需精通各種技術,就可以提供高階解決方案。您只需集中精力解決業務問題,其他工作都可以交給 Oracle APEX 來處理。
v20.2版本匯出資料優化點:
- 內建PDF列印和Excel下載,用於互動式報告,互動式網格和經典報告。確保在您的區域屬性中啟用PDF和Excel作為其他下載格式。使用者可以在下載對話方塊中更改頁面方向和大小。
- 互動式報告-傳送電子郵件:現在可以附加所有下載格式。
- 與BI Publisher的增強整合。
- 新的APEX_REGION.EXPORT_DATA和APEX_DATA_EXPORT API,以程式設計方式生成PDF,CSV,Excel,HTML,JSON和XML檔案。
- 內建PDF現在支援中文,日文和韓文。
如需要使用可在以下的地址申請工作區:
申請免費工作區地址:
https://apex.oracle.com/pls/apex/f?p=4700:2:10115035671324:::RP::
APEX中匯出資料實現:
一、普通表匯出、列印實現
- 示例資料匯入:
進入:SQL工作室->實用程式->示例資料集->【EMP/DEPT】資料安裝
- 建立應用:
進入:應用程式構建器->建立->新建應用程式->建立應用程式;建立完成如下圖
- 頁面設計:
進入應用程式:進入主頁設計:新增經典報表元素->繫結資料表->支援匯出和列印功能->進行列印設定:列印成Excel
- 執行效果
執行效果如下,點選匯出時匯出該表csv檔案內容;列印時輸出該表對於html內容
二、互動式報表匯出、列印
- 設計頁面:在頁面中新增互動式報表->並繫結資料表
- 預覽執行效果:操作->下載->選擇下載格式
三、呼叫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;
修改頁面提交重新載入:
執行效果:
- 13 APEX_DATA_EXPORT(重點):APEX_DATA_EXPORT包含用於從Oracle Application Express匯出資料的實現。支援的檔案型別包括:PDF,XLSX,HTML,CSV,XML和JSON。
本次使用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