分布式DBA:掌握SQL存儲過程
來源:程序員人生 發布時間:2014-04-30 18:12:19 閱讀次數:2806次
DB2 存儲過程:基礎知識
您在客戶端工作站上對遠程服務器和位于該服務器上的數據庫進行分類的任何時候,都存在一個簡單的 DB2 客戶端/服務器環境。在這種環境中,每次對遠程服務器上的數據庫執行 SQL 語句時,語句本身通過網絡從客戶端發送到服務器上的數據庫。然后數據庫處理語句,結果通過網絡發送回客戶端。這意味著,對于每條被執行的 SQL 語句,兩條消息都必須經過網絡。因此,執行大量 SQL 操作的應用程序將產生大量網絡通信。
存儲過程是編寫并直接存儲在數據庫中的命名 SQL 語句組(在一些情況中,包括操作系統調用)。存儲過程提供下列優勢:
減少網絡通信量。對于編碼在存儲過程中的 SQL 語句,消息不通過網絡發送。如果存儲過程設計正確,那么只有客戶端應用程序需要的數據才通過網絡發送。
提高服務器密集型工作的性能。因為較少數據通過網絡發送,并且因為處理在服務器上完成,所以復雜查詢和其它服務器密集型的工作可以更快地執行。
業務邏輯的分離和重用。當業務規則被合并到存儲過程中時,可以僅僅根據需求調用存儲過程來多次重用邏輯。此外,保證相同的業務規則邏輯在所有使用它的應用程序中一致實施。如果業務規則改變,那么只需要改變存儲過程中的邏輯;不需要更改調用存儲過程的應用程序。
訪問服務器功能。因為存儲過程在服務器工作站上直接運行,所以它們可以利用任何額外的內存、更快的處理器或數據庫服務器可能具備的其它資源。另外,存儲過程可以執行許多 DB2 的管理命令,這些命令只能在服務器上運行。最后,因為存儲過程不僅僅限于執行數據庫的活動,所以它們的優點是可以利用已經安裝在服務器上的任何附加軟件。
但是,有兩個需要注意的地方。第一,所有輸入數據都必須在調用時從應用程序傳遞到存儲過程。第二,存儲過程生成的結果數據集只有在存儲過程完成執行后才返回給應用程序。換句話說,在存儲過程運行期間,應用程序和存儲過程之間不能發生任何交互。
創建 SQL 存儲過程
對于 Linux、Unix 和 Windows 平臺上的 DB2,可以使用三種不同類型的存儲過程:SQL 的、外部的和來源(sourced)的存儲過程。正如名稱所示,SQL 存儲過程完全由 SQL 語句和 SQL PL 對象組成。相反,外部存儲過程使用 C、C++、Java 或 COBOL 等高級編程語言構成。來源存儲過程是基于其它 SQL 或外部存儲過程的存儲過程。
存儲過程通過執行 CREATE PROCEDURE SQL 語句創建。這個語句存在三種形式(每種類型的存儲過程有一種);用來創建 SQL 存儲過程的形式的基本語法如下: CREATE PROCEDURE [ProcedureName] ( [ParamType] [ParamName] [DataType] ,...)
CREATE PROCEDURE [ProcedureName] ( [ParamType] [ParamName] [DataType] ,...)
<SPECIFIC [SpecificName]>
<DYNAMIC RESULT SETS 0 | DYNAMIC RESULT SETS [NumResultSets]>
<CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA>
<DETERMINISTIC | NOT DETERMINISTIC>
<CALLED ON NULL INPUT>
<LANGUAGE SQL>
[ProcedureBody]
其中:
ProcedureName 標識指定給存儲過程的名稱。
ParamType 指示 ParamName 標識的參數是輸入參數(IN)、輸出參數(OUT)或兩者(INOUT)都是。
ParamName 標識指定給存儲過程參數的名稱。
DataType 標識存儲過程期望為 ParamName 標識的參數接收和/或發送的數據類型。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈