許多人在使用數據庫,但他們實際上并不了解靜態 SQL 和動態 SQL 之間的區別。它們的目的是獲取查詢的輸出,無論是靜態的還是動態的。在本文中,您將通過詳細討論了解靜態與動態 SQL 查詢、SQL 語句的處理方式、動態 DBMS(數據庫管理系統)、靜態與動態報告以及應用程序的嵌入式 SQL 示例。
什么是嵌入式 SQL?
嵌入式或靜態 SQL 查詢是那些在執行或運行時不會更改并且可以硬編碼(其中數據或參數不能更改)到不同應用程序中的指令。
嵌入式 SQL 應用程序
考慮一個嵌入式應用程序的示例,其中語句主要嵌入在 C++ 源文件中,其中預處理器將語句轉換為對運行時庫的調用。它可移植到其他環境,并為每個操作環境提供相同的功能。
嵌入式 SQL 應用程序由 SQL 語句組成,這些語句在編譯之前被轉換為 C 或 C++ 代碼。如圖所示,運行時的應用程序使用 SAP IQ 接口庫,該庫稱為 DBLIB,用于與數據庫服務器進行通信。DBLIB 是一個動態鏈接庫 (DLL),可以在所有主要平臺上共享。
什么是動態 SQL?
顧名思義,它是一種允許專業人員構建可在運行時動態更改的 SQL 語句的技術。動態查詢是可以在執行或運行時構造的語句;例如,應用程序可能允許用戶在執行時運行他們自己的查詢。
什么是動態數據庫管理系統?
動態 DBMS 是一個具有“基于值”的對象關系的數據庫,它在檢索時指定,并且在檢索期間發現相關記錄的位置。
下列關于靜態和動態報表的說法不準確的是?
打印的銷售分析是動態報告的一個例子,是關于靜態和動態報告的錯誤陳述。以下關于報告的陳述屬實:
- 靜態報告作為 PDF 文檔或在創建時固定的商業智能 (BI) 文檔發布,因此這些報告不會被修改。
- 發布動態報表需要商業智能 (BI) 應用程序在交付給用戶時訪問數據源。
- 永遠記住,印刷銷售分析是靜態報告的一個例子。
- 動態報告是商業智能 (BI) 文檔,并在用戶請求此文件時更新。
SQL 語句是如何處理的?
在繼續下一步之前,有必要了解結構化查詢語言語句是如何處理的。
1.解析語句
例如,用戶想要運行以下查詢:
選擇 P、Q、R
從甲,乙
其中 P> 800
和 R = 'XYZ'
DBMS 會將查詢解析為單個單詞,稱為標記,以確保語句沒有拼寫錯誤和語法錯誤。這將很快完成,因為在解析語句時無需訪問數據庫。
2. 驗證聲明
數據庫管理系統將檢查表(在我們的示例表 A 和 B 的情況下)是否存在于數據庫(系統目錄)中?用戶是否有權運行這些語句?DBMS 驗證列名沒有歧義并且存在。
3.優化語句
DBMS 通過探索不同的方式來優化語句。可以使用索引(主鍵)來加快搜索速度嗎?數據庫管理系統應該先對第一個表應用搜索條件,然后將其連接到第二個表,還是應該從連接開始,然后使用條件?在探索了所有可能的條件之后,DBMS 會選擇一個更合適的。它可能會為同一個查詢探索數千種可能的不同方式,因此它是一個 CPU 密集型過程。
4.訪問計劃或二進制形式
在此步驟中,將生成 SQL 語句的訪問計劃或二進制形式。
5. 訪問計劃的執行
在最后一步,將執行訪問計劃。
嵌入式 SQL 和動態 SQL 之間的基本區別
靜止的 | 動態的 |
---|---|
在靜態或嵌入式 SQL 中,如何訪問數據庫是在嵌入式 SQL 語句中預先確定的,并由預處理器執行,用戶無法在運行時運行查詢。 | 如何訪問數據庫是在運行時確定的,用戶還可以在運行時運行結構化查詢語言指令。 |
它更快捷、更高效。 | 它不那么迅速和高效。 |
所有數據庫查詢都是在編譯時編譯的。 | 所有數據庫查詢都是在應用程序運行時編譯的。 |
包括解析、驗證、優化和生成應用程序訪問計劃在內的所有過程都在編譯時完成。 | 所有過程,包括解析、驗證、優化和生成應用程序訪問計劃(SQL 查詢的二進制形式)都在運行時完成。 |
它主要用于數據分布一致的情況。 | 它用于數據分布不均勻的情況。 |
不使用 PREPARE、EXECUTE 和 EXECUTE IMMEDIATE 語句。 | 使用 PREPARE、EXECUTE 和 EXECUTE IMMEDIATE 語句。 |
由于硬編碼到應用程序中,它不太靈活。 | 我們可以在運行時運行我們的 SQL 語句,因此更加靈活。 |