反饋已提交
網絡繁忙
資料庫查詢是指從定義好的資料庫連結中,也就是資料源中使用 SQL 語句來選擇需要的欄位,一般是直接對資料源中的資料庫表直接進行操作。
資料庫查詢方式可分為:表查詢、檢視表查詢、模糊查詢三種。
1)點選「範本>範本資料集」,彈出範本資料集對話框,點選範本資料集視窗的左上角的按鈕,選擇「資料庫查詢」,然後給資料庫查詢命名,選擇所需的資料連結,如下圖所示:
2)選中查詢編輯器,在其中輸入 SQL 語句SELECT * FROM ORDERS where ORDERID=${ID}。
這是一個帶參數的 SQL 查詢,${}為參數的形式,中間的 ID 即參數的名稱,點選預覽,跳出提示框,輸入參數ID=10004,結果可以在預覽組中看,實際就是執行SELECT * FROM ORDERS where ORDERID=10004的 SQL 查詢。如下圖所示:
注:一般的 SQL 語句通用,只是在設定參數時需要參照以上的形式。
注:若參數名稱是字母和數字組合(例如:A1)則會被系統認為是儲存格,如果不設定預設值會觸發範本計算,進而導致執行一次 SQL。所以使用者需要避免使用字母和數字組合的參數名稱,若要用則必須給它設定預設值。
下面介紹整個資料集介面的一些基本屬性,如下表所示:
類型
對於查詢類型,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),這個數值只有在點選「預覽」按鈕的時候才起作用,不會錯誤地作用到引用這個查詢的報表範本檔案中。
檢視表查詢是指對定義好的資料源中的檢視表進行操作。
1)點選選單「範本>範本資料集」,彈出範本資料集對話框,點選範本資料集視窗的左上角的按鈕,選擇「資料庫查詢」,然後給資料庫查詢命名,即可新增檢視表查詢。如下圖所示:
選擇資料源使用 SQL 對檢視表查詢進行操作。下文以 SQL Server 檢視表資料庫為例:
在查詢編輯器中輸入 SQL 語句:SELECT * FROM [sys].[types] 其中 [sys].[types] 是某個檢視表查詢的名稱,然後點選「預覽」即可看到檢視表查詢引用成功。如下圖所示:
注:可以將資料連結中的表、檢視表直接拖動到查詢編輯器中。
在表下方有一塊空白搜尋框,它們用作模糊查詢。例如想要搜尋顧客相關的表,在搜尋框中填入customer,則會進行自動搜尋進行模糊匹配,如下圖所示:
注1:FineReport 資料庫查詢只支援一條自然 SQL 語句的查詢,不支援多個自然 SQL 語句,比如 SELECT * FROM A SELECT * FROM B
注2:create 、drop 等建立表、刪除表不在官方支援範圍內,官方只支援 select 。
注3:在SQL資料集中執行儲存程式時,當前系統只支援以下兩種開頭的語句格式:{CALL 和 {?=CALL,不支援以 EXEC 開頭的語句格式。
在之前版本中,若 SQL 中含有參數,就不方便直接從查詢介面將 SQL 語句複製到其他地方。
10.0.17 及之後的版本,新增「查看執行 SQL」功能,方便使用者貼補其他資料庫軟體進行排查測試。
點選查詢頁面上方的「查看執行 SQL」按鈕,由於 SQL 語句中包含參數,會自動彈出參數輸入介面。如下圖所示:
執行的 SQL 語句自動複製到剪貼簿,使用者可將其貼補到其他資料庫軟體進行排查測試。如下圖所示:
1)若SQL中呼叫了自訂函式,則無法正常使用「查看執行SQL」功能。複製的SQL語句在其他資料庫軟體無法正常運作。2)某些使用者為了 SQL 防注入 ,開啟了轉義功能。當參數與分離字元匹配時,會影響查詢結果。在這種情況下會提示:轉義部分參數防止SQL注入,查詢結果與預期可能不符,請檢查並修改參數或交握管理者 。 滑鼠觸碰右上角提示圖示,可以看到已轉義的參數。在本範例中,輸入參數值 1002 是被轉義的參數。
11.0.16 及之後版本,支援在資料庫日誌中的 SQL 語句前新增註釋,幫助排查資料庫效能問題。
SQL 查詢場景及對應的註釋內容如下表所示:注1:註釋中的「範本名稱」/「資料集名稱」/「任務名稱」為 base64 加密後的密文,使用者可自行使用解碼工具進行解碼查看。
注2:儲存程式不支援顯示 SQL 註釋。
注3:不支持mycat,如需使用请联系技术支持。
-- DesignerDatasetPreview_[資料集名稱]_[正在編輯的範本名]
SQL語句
-- DatasetPreview_[資料集名稱]SQL語句
-- TemplatePreviewFetch_[範本名稱]SQL語句
-- ESDFetch_[範本名稱]SQL語句
-- ScheduleFetch_[範本名稱]_[任務名稱]SQL語句
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 即可。
v$sql 記錄共享池快取中使用者執行過的 SQL 資訊,可以透過 SQL 語句查詢出具體 SQL 以及操作的時間,如下圖所示:注:若查詢不到已執行的 SQL,可能是執行的 SQL 已經被置換出共享 SQL 區。
SELECT SQL_TEXT,FIRST_LOAD_TIMEFROM v$sql
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_timeFROMsys.dm_exec_query_stats QS--關鍵字CROSS APPLYsys.dm_exec_sql_text(QS.sql_handle) STWHEREQS.creation_time BETWEEN '2011-10-20 16:00:00' AND '2023-10-20 17:00:00'AND ST.text LIKE '%%'ORDER BYQS.creation_time DESC
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙