反饋已提交

網絡繁忙

資料庫查詢

1. 概述

1.1 版本

版本
功能變動
11.0
-
11.0.5選擇 Postgre 系列資料庫連結時,只能新增連結時所選模式下的資料表
11.0.16支援在資料庫日誌的 SQL 語句前新增註釋,幫助排查效能問題

1.2 功能介紹

資料庫查詢是指從定義好的資料庫連結中,也就是資料源中使用 SQL 語句來選擇需要的欄位,一般是直接對資料源中的資料庫表直接進行操作。

2. 查詢方式

資料庫查詢方式可分為:表查詢檢視表查詢模糊查詢三種。

2.1 表查詢

2.1.1 查詢步驟

1)點選「範本>範本資料集,彈出範本資料集對話框,點選範本資料集視窗的左上角的按鈕,選擇「資料庫查詢」,然後給資料庫查詢命名,選擇所需的資料連結,如下圖所示:

2)選中查詢編輯器,在其中輸入 SQL 語句SELECT * FROM ORDERS where ORDERID=${ID}

這是一個帶參數的 SQL 查詢,${}為參數的形式,中間的 ID 即參數的名稱,點選預覽,跳出提示框,輸入參數ID=10004,結果可以在預覽組中看,實際就是執行SELECT * FROM ORDERS where ORDERID=10004的 SQL 查詢。如下圖所示:

注:一般的 SQL 語句通用,只是在設定參數時需要參照以上的形式。

注:若參數名稱是字母和數字組合(例如:A1)則會被系統認為是儲存格,如果不設定預設值會觸發範本計算,進而導致執行一次 SQL。所以使用者需要避免使用字母和數字組合的參數名稱,若要用則必須給它設定預設值。

2.1.2 資料集介面的基本屬性

下面介紹整個資料集介面的一些基本屬性,如下表所示:

型別

對於查詢型別,FineReport 既支援普通的 SQL 查詢,也支援儲存過程,並且這兩種型別的查詢語句中都可以包含參數。 

注:  SQL 查詢和儲存過程,透過 JDBC最終都是由資料庫軟體來決議執行,並將結果傳回給 FineReport 來顯示,所以查詢執行的速度和效能完全由對應的資料庫軟體來決定。

精靈

FineReport 提供了簡單的精靈來幫助使用者建立簡單的 SQL 查詢和儲存過程。  

注:由於 SQL 語言比較複雜,FineReport 提供的精靈只能定義常用的簡單 SQL 查詢(不支援分組,子查詢等)。

儲存過程的精靈基本可以滿足要求,夠列出所連結資料庫中所有的儲存過程,並根據所選擇儲存過程的名稱,自動獲得儲存過程的參數來產生可以執行的儲存過程語句。 

查詢編輯器

當精靈產生的查詢不能完全滿足要求的時候,可以透過我們提供的正文編輯器來編輯任意複雜的查詢語句(利用精靈產生的儲存過程,一般不需要再次編輯)。

參數

FineReport 可以完美地支援參數查詢,在定義查詢語句的時候,只需要用特殊字串 "${XXX}" (參數值為數值型別,為${參數},否則為 '${XXX}') ,將參數名稱前後包含起來,點選下面的重新整理按鈕,可以給參數賦預設值。這樣當報表引擎執行這個 SQL 語句時,在 C/S 系統會彈出一個對話框來要求使用者輸入對應參數的數值,並且會自動顯示預設值,在 B/S 系統會遍歷用戶端(通常是瀏覽器)傳遞過來的所有參數數值; FineReport 利用這些參數的數值來更換查詢中對應的字串“${XXX}”,將更換過的查詢語句提交給資料庫決議和執行。

比如: 1. 使用者輸入查詢語句為: select * from Customers where ID = ${ID};  

2. 從用戶端動態取到的 ID 數值為: 1; 

3. 根據參數值產生新的查詢語句:select * from Customers  where ID = 1,利用 JDBC 將這個新產生的查詢語句傳遞給相應的資料庫決議和執行。

最大預覽數

為了加快預覽的速度,設定了預覽的最大行數(預設值 200),這個數值只有在點選預覽按鈕的時候才起作用,不會錯誤地作用到引用這個查詢的報表範本檔案中。

2.2 檢視表查詢

檢視表查詢是指對定義好的資料源中的檢視表進行操作。

2.2.1 資料庫查詢

1)點選選單「範本>範本資料集,彈出範本資料集對話框,點選範本資料集視窗的左上角的按鈕,選擇「資料庫查詢」,然後給資料庫查詢命名,即可新增檢視表查詢。如下圖所示:

2.2.2 使用檢視表查詢

選擇資料源使用 SQL 對檢視表查詢進行操作。下文以 SQL Server 檢視表資料庫為例:

在查詢編輯器中輸入 SQL 語句:SELECT * FROM [sys].[types] 其中 [sys].[types] 是某個檢視表查詢的名稱,然後點選預覽即可看到檢視表查詢引用成功。如下圖所示:

注:可以將資料連結中的表、檢視表直接拖動到查詢編輯器中。

2.3 模糊查詢

在表下方有一塊空白搜尋框,它們用作模糊查詢。例如想要搜尋顧客相關的表,在搜尋框中填入customer,則會進行自動搜尋進行模糊匹配,如下圖所示:

注1:FineReport 資料庫查詢只支援一條自然 SQL 語句的查詢,不支援多個自然 SQL 語句,比如 SELECT * FROM A SELECT * FROM B

注2:create 、drop 等建立表、刪除表不在官方支援範圍內,官方只支援 select 。

3. 複製 SQL 語句

在之前版本中,若 SQL 中含有參數,就不方便直接從查詢介面將 SQL 語句複製到其他地方。

10.0.17 及之後的版本,新增「查看執行 SQL」功能,方便使用者貼補其他資料庫軟體進行排查測試。

3.1 範例

點選查詢頁面上方的「查看執行 SQL」按鈕,由於 SQL 語句中包含參數,會自動彈出參數輸入介面。如下圖所示:

執行的 SQL 語句自動複製到剪下簿,使用者可將其貼補到其他資料庫軟體進行排查測試。如下圖所示:

3.2 注意事項

1)若SQL中呼叫了自訂函式,則無法正常使用「查看執行SQL」功能。複製的SQL語句在其他資料庫軟體無法正常運作。
2)某些使用者為了 SQL 防注入 ,開啓了轉義功能。當參數與分離字元匹配時,會影響查詢結果。在這種情況下會提示:轉義部分參數防止SQL注入,查詢結果與預期可能不符,請檢查並修改參數或聯絡管理者 。   
滑鼠觸碰右上角提示圖示,可以看到已轉義的參數。在本範例中,輸入參數值 1002 是被轉義的參數。

4. 效能排查

11.0.16 及之後版本,支援在資料庫日誌中的 SQL 語句前新增註釋,幫助排查資料庫效能問題。

4.1 SQL註釋內容

SQL 查詢場景及對應的註釋內容如下表所示:
注1:註釋中的「範本名稱」/「資料集名稱」/「任務名稱」為 base64 加密後的密文,使用者可自行使用解碼工具進行解碼查看。
注2:儲存過程不支援顯示 SQL 註釋。

SQL查詢場景日誌格式效果範例
設計器中預覽資料集

-- DesignerDatasetPreview_[資料集名稱]_[正在編輯的範本名]

SQL語句

數據決策系統中預覽伺服器資料集

-- DatasetPreview_[資料集名稱]
SQL語句

預覽範本

-- TemplatePreviewFetch_[範本名稱]
SQL語句

抽數快取

-- ESDFetch_[範本名稱]
SQL語句

排程管理

-- ScheduleFetch_[範本名稱]_[任務名稱]
SQL語句

4.2 資料庫日誌查詢

4.2.1 MySQL

MySQL 伺服器執行的查詢語句會記錄在通用查詢日誌(General Query Log)中,預設情況下,通用查詢日誌功能是關閉的。
使用以下命令查看通用查詢日誌是否開啓,其中,「general_log_file」變數指定了日誌檔案所在的位置。如下圖所示:

mysql>SHOW VARIABLES LIKE '%general%';


若通用查詢日誌功能為關閉狀態,可以透過修改 MySQL 的 my.cnf 配置檔案來開啓通用查詢日誌功能。

general_log_file = /var/log/mysql/mysql.log    #general_log_file的路徑爲日志的輸出路徑
general_log = 1    #将general_log設置爲1,表示開啓查詢日志

修改完成後,儲存配置檔案,並重啓 MySQL 即可。

4.2.2 Oracle

v$sql 記錄共享池快取中使用者執行過的 SQL 資訊,可以透過 SQL 語句查詢出具體 SQL 以及操作的時間,如下圖所示:
注:若查詢不到已執行的 SQL,可能是執行的 SQL 已經被置換出共享 SQL 區。

SELECT SQL_TEXT,FIRST_LOAD_TIME
FROM v$sql

4.2.3 SQL SERVER

sys.dm_exec_query_stats 記錄 SQL Server 快取中的查詢語句,可以透過 SQL 語句查詢出具體 SQL 以及操作的時間,如下圖所示:
注:sys.dm_exec_query_stats 僅記錄已完成的查詢資料。

SELECT TOP 1000
--創建時間
QS.creation_time,
--查詢語句
SUBSTRING(ST.text,(QS.statement_start_offset/2)+1,
((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1
) AS statement_text,
--執行文本
ST.text,
--執行計劃
QS.total_worker_time,
QS.last_worker_time,
QS.max_worker_time,
QS.min_worker_time
FROM
sys.dm_exec_query_stats QS
--關鍵字
CROSS APPLY
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE
QS.creation_time BETWEEN '2011-10-20 16:00:00' AND '2023-10-20 17:00:00'
AND ST.text LIKE '%%'
ORDER BY
QS.creation_time DESC

附件列表


主題: 資料準備
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉