總結(jié)SQL的存儲(chǔ)過(guò)程_Mssql數(shù)據(jù)庫(kù)教程
推薦:如何檢測(cè)SQL Server是否有特洛伊木馬你的SQL Server最近是否運(yùn)行不正常?不,我指的不是我們肯定會(huì)遇到的通常的數(shù)據(jù)庫(kù)和操作系統(tǒng)問(wèn)題。我的意思是,你是否經(jīng)歷過(guò)服務(wù)器的反應(yīng)遲鈍,不穩(wěn)定的動(dòng)作,繁重的網(wǎng)絡(luò)負(fù)擔(dān),或者是服務(wù)器處理或者內(nèi)存利用率的直線上升?哦,不排除在你的系統(tǒng)中有特洛伊木馬
DB2 存儲(chǔ)過(guò)程:基礎(chǔ)知識(shí)
您在客戶端工作站上對(duì)遠(yuǎn)程服務(wù)器和位于該服務(wù)器上的數(shù)據(jù)庫(kù)進(jìn)行分類的任何時(shí)候,都存在一個(gè)簡(jiǎn)單的 DB2 客戶端/服務(wù)器環(huán)境。在這種環(huán)境中,每次對(duì)遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)執(zhí)行 SQL 語(yǔ)句時(shí),語(yǔ)句本身通過(guò)網(wǎng)絡(luò)從客戶端發(fā)送到服務(wù)器上的數(shù)據(jù)庫(kù)。然后數(shù)據(jù)庫(kù)處理語(yǔ)句,結(jié)果通過(guò)網(wǎng)絡(luò)發(fā)送回客戶端。這意味著,對(duì)于每條被執(zhí)行的 SQL 語(yǔ)句,兩條消息都必須經(jīng)過(guò)網(wǎng)絡(luò)。因此,執(zhí)行大量 SQL 操作的應(yīng)用程序?qū)a(chǎn)生大量網(wǎng)絡(luò)通信。
存儲(chǔ)過(guò)程是編寫并直接存儲(chǔ)在數(shù)據(jù)庫(kù)中的命名 SQL 語(yǔ)句組(在一些情況中,包括操作系統(tǒng)調(diào)用)。存儲(chǔ)過(guò)程提供下列優(yōu)勢(shì):
減少網(wǎng)絡(luò)通信量。對(duì)于編碼在存儲(chǔ)過(guò)程中的 SQL 語(yǔ)句,消息不通過(guò)網(wǎng)絡(luò)發(fā)送。如果存儲(chǔ)過(guò)程設(shè)計(jì)正確,那么只有客戶端應(yīng)用程序需要的數(shù)據(jù)才通過(guò)網(wǎng)絡(luò)發(fā)送。
提高服務(wù)器密集型工作的性能。因?yàn)檩^少數(shù)據(jù)通過(guò)網(wǎng)絡(luò)發(fā)送,并且因?yàn)樘幚碓诜⻊?wù)器上完成,所以復(fù)雜查詢和其它服務(wù)器密集型的工作可以更快地執(zhí)行。
業(yè)務(wù)邏輯的分離和重用。當(dāng)業(yè)務(wù)規(guī)則被合并到存儲(chǔ)過(guò)程中時(shí),可以僅僅根據(jù)需求調(diào)用存儲(chǔ)過(guò)程來(lái)多次重用邏輯。此外,保證相同的業(yè)務(wù)規(guī)則邏輯在所有使用它的應(yīng)用程序中一致實(shí)施。如果業(yè)務(wù)規(guī)則改變,那么只需要改變存儲(chǔ)過(guò)程中的邏輯;不需要更改調(diào)用存儲(chǔ)過(guò)程的應(yīng)用程序。
訪問(wèn)服務(wù)器功能。因?yàn)榇鎯?chǔ)過(guò)程在服務(wù)器工作站上直接運(yùn)行,所以它們可以利用任何額外的內(nèi)存、更快的處理器或數(shù)據(jù)庫(kù)服務(wù)器可能具備的其它資源。另外,存儲(chǔ)過(guò)程可以執(zhí)行許多 DB2 的管理命令,這些命令只能在服務(wù)器上運(yùn)行。最后,因?yàn)榇鎯?chǔ)過(guò)程不僅僅限于執(zhí)行數(shù)據(jù)庫(kù)的活動(dòng),所以它們的優(yōu)點(diǎn)是可以利用已經(jīng)安裝在服務(wù)器上的任何附加軟件。
但是,有兩個(gè)需要注意的地方。第一,所有輸入數(shù)據(jù)都必須在調(diào)用時(shí)從應(yīng)用程序傳遞到存儲(chǔ)過(guò)程。第二,存儲(chǔ)過(guò)程生成的結(jié)果數(shù)據(jù)集只有在存儲(chǔ)過(guò)程完成執(zhí)行后才返回給應(yīng)用程序。換句話說(shuō),在存儲(chǔ)過(guò)程運(yùn)行期間,應(yīng)用程序和存儲(chǔ)過(guò)程之間不能發(fā)生任何交互。
創(chuàng)建 SQL 存儲(chǔ)過(guò)程
對(duì)于 Linux、Unix 和 Windows 平臺(tái)上的 DB2,可以使用三種不同類型的存儲(chǔ)過(guò)程:SQL 的、外部的和來(lái)源(sourced)的存儲(chǔ)過(guò)程。正如名稱所示,SQL 存儲(chǔ)過(guò)程完全由 SQL 語(yǔ)句和 SQL PL 對(duì)象組成。相反,外部存儲(chǔ)過(guò)程使用 C、C 、Java 或 COBOL 等高級(jí)編程語(yǔ)言構(gòu)成。來(lái)源存儲(chǔ)過(guò)程是基于其它 SQL 或外部存儲(chǔ)過(guò)程的存儲(chǔ)過(guò)程。
存儲(chǔ)過(guò)程通過(guò)執(zhí)行 CREATE PROCEDURE SQL 語(yǔ)句創(chuàng)建。這個(gè)語(yǔ)句存在三種形式(每種類型的存儲(chǔ)過(guò)程有一種);用來(lái)創(chuàng)建 SQL 存儲(chǔ)過(guò)程的形式的基本語(yǔ)法如下: 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 標(biāo)識(shí)指定給存儲(chǔ)過(guò)程的名稱。
ParamType 指示 ParamName 標(biāo)識(shí)的參數(shù)是輸入?yún)?shù)(IN)、輸出參數(shù)(OUT)或兩者(INOUT)都是。
ParamName 標(biāo)識(shí)指定給存儲(chǔ)過(guò)程參數(shù)的名稱。
DataType 標(biāo)識(shí)存儲(chǔ)過(guò)程期望為 ParamName 標(biāo)識(shí)的參數(shù)接收和/或發(fā)送的數(shù)據(jù)類型。
SpecificName 標(biāo)識(shí)指定給存儲(chǔ)過(guò)程的專用名。當(dāng)一個(gè)專用名被指定給存儲(chǔ)過(guò)程時(shí),可以通過(guò)在特殊形式的 DROP SQL 語(yǔ)句(DROP SPECIFIC PROCEDURE [SpecificName])中引用專用名來(lái)刪除存儲(chǔ)過(guò)程。但是,如果沒(méi)有指定任何專用名,那么必須同時(shí)提供存儲(chǔ)過(guò)程名稱和存儲(chǔ)過(guò)程簽名(也就是每個(gè)存儲(chǔ)過(guò)程參數(shù)使用的數(shù)據(jù)類型的列表)來(lái)作為 DROP 語(yǔ)句的輸入。專用名不能用來(lái)調(diào)用存儲(chǔ)過(guò)程。
NumResultSets 指示存儲(chǔ)過(guò)程返回結(jié)果數(shù)據(jù)集并標(biāo)識(shí)返回多少數(shù)據(jù)集。
ProcedureBody 標(biāo)識(shí)調(diào)用存儲(chǔ)過(guò)程時(shí)要執(zhí)行的單個(gè) SQL 語(yǔ)句或者一個(gè)或多個(gè)復(fù)合 SQL 語(yǔ)句。
注意:方括號(hào)([])中顯示的參數(shù)或選項(xiàng)必填寫;尖括號(hào)(<>)中顯示的參數(shù)/選項(xiàng)不是必填的。可以在 DB2 9 SQL Reference - 卷 2(參見(jiàn)參考資料,第 51 頁(yè))中找到 CREATE PROCEDURE 語(yǔ)句的完整語(yǔ)法。 子句用來(lái)標(biāo)識(shí)編碼在存儲(chǔ)過(guò)程體中的 SQL 語(yǔ)句的類型。可用的值如下:
CONTAINS SQL。存儲(chǔ)過(guò)程體包含既不讀取數(shù)據(jù)也不修改數(shù)據(jù)的可執(zhí)行 SQL 語(yǔ)句。
READS SQL DATA。存儲(chǔ)過(guò)程體包含讀取數(shù)據(jù)但不修改數(shù)據(jù)的可執(zhí)行 SQL 語(yǔ)句。
MODIFIES SQL DATA。存儲(chǔ)過(guò)程體包含既讀取數(shù)據(jù)也修改數(shù)據(jù)的可執(zhí)行 SQL 語(yǔ)句。
子句用來(lái)標(biāo)識(shí)當(dāng)傳遞相同(DETERMINISTIC)或不同(NOT DETERMINISTIC)的參數(shù)值時(shí)存儲(chǔ)過(guò)程是否始終返回相同的結(jié)果。例如,對(duì)傳遞給它的任何值增加 15% 的存儲(chǔ)過(guò)程將被視為 DETERMINISTIC,而使用 TIMESTAMP_ISO() 函數(shù)生成唯一 ID 的存儲(chǔ)過(guò)程將被視為 NOT DETERMINISTIC。
最后, 子句指示存儲(chǔ)過(guò)程即使在為一個(gè)或多個(gè)輸入?yún)?shù)提供空值進(jìn)行調(diào)用時(shí)仍然被調(diào)用。
清單 1 顯示一個(gè)由簡(jiǎn)單的 SQL 存儲(chǔ)過(guò)程構(gòu)成的 CREATE PROCEDURE 語(yǔ)句,設(shè)計(jì)用來(lái)將溫度從華氏溫度轉(zhuǎn)換成攝氏溫度。
清單 1. 創(chuàng)建簡(jiǎn)單的 SQL 存儲(chǔ)過(guò)程
CREATE PROCEDURE conv_temp.f_to_c(IN temp_f REAL, OUT temp_c REAL)
DYNAMIC RESULT SETS 0
CONTAINS SQL
DETERMINISTIC
LANGUAGE SQL
BEGIN
DECLARE temp_value REAL;
SET temp_value = (temp_f - 32);
SET temp_c = (5 * temp_value) / 9;
END
分享:解析SQL Server 2005 Express混合模式登錄設(shè)置在VS2005裝完后,會(huì)自帶SQL Server2005 express版,為了便于管理,還需要安裝一個(gè)企業(yè)管理器,需要下載 Microsoft SQL Server Management Studio Express(下載名:SQLServer2005_SSMSEE.msi)。因?yàn)槟J(rèn)的是只能用windows系統(tǒng)登錄模式登錄,如果要用混合模式
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- 解讀SQL Server SA權(quán)限最新入侵方法
- 解析SQL Server數(shù)據(jù)庫(kù)系統(tǒng)的編譯
- 數(shù)據(jù)庫(kù)的分離及附加
- 如何將SQL2000數(shù)據(jù)庫(kù)升級(jí)到SQL2005
- 讓SQL Server數(shù)據(jù)庫(kù)自動(dòng)執(zhí)行管理任務(wù)(二)
- 解析Asp.net編程中的數(shù)組基礎(chǔ)實(shí)例學(xué)習(xí)
- SQL Server 中易混淆的數(shù)據(jù)類型
- 分享:在存儲(chǔ)過(guò)程中使用另一個(gè)存儲(chǔ)過(guò)程返回的查詢結(jié)果集的方法
- 怎樣用VB存取SQL Server中的圖像數(shù)據(jù)
- 揭開微軟SQL Server 2008的神秘面紗
猜你也喜歡看這些
- 模板無(wú)憂:mysql數(shù)據(jù)庫(kù)優(yōu)化總結(jié)
- mysql導(dǎo)出數(shù)據(jù)庫(kù)幾種方法
- 基于mysql事務(wù)、視圖、存儲(chǔ)過(guò)程、觸發(fā)器的應(yīng)用分析
- MySQL和Access的區(qū)別
- linux下mysql提示mysql deamon failed to start錯(cuò)誤的解決方法
- mysql常用監(jiān)控腳本命令整理
- 網(wǎng)站模板:如何捕獲和記錄SQL Server中發(fā)生的死鎖
- MySQL——修改root密碼的4種方法(以windows為例)
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- 深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-總結(jié)SQL的存儲(chǔ)過(guò)程
。