時間:2022-12-15 22:30:01 | 來源:信息時代
時間:2022-12-15 22:30:01 來源:信息時代
存儲過程 : 存儲在數(shù)據(jù)庫中的可執(zhí)行例程,直接在數(shù)據(jù)庫服務(wù)器運行,允許連接到服務(wù)器的應(yīng)用進行調(diào)用。一般由過程性語句定義,可以給它指定不同數(shù)據(jù)類型的參數(shù),根據(jù)具體系統(tǒng)的規(guī)定,還可以指定參數(shù)的輸入、輸出類型。
Sybase SQL Server首先引入過程性SQL語言T-SQL,并在Sybase Adaptive Server和MS SQL Server中進一步加以增強。目前多數(shù)據(jù)庫產(chǎn)品都提供建立存儲過程的過程性SQL語言,如Oracle的PL/SQL,Informix的SPL等。不同系統(tǒng)對存儲過程的語法和操作能力可能有一定的變化,比如過程定義的首部(包括參數(shù)類型)、過程體局部參數(shù)類型、支持的流程控制語句、過程執(zhí)行狀態(tài)標志變量等,甚至個別操作符也可能有所不同。有些系統(tǒng)還支持用 C/C++等高級語言定義的存儲過程,如PostgreSQL支持C編譯模塊作為自定義函數(shù)。
SQL標準中也提供了SQL持久存儲模塊(參見7.3.12)和SQL調(diào)用例程等。
1.存儲與執(zhí)行方法
存儲過程一般是可編譯的,存儲方法主要有兩種,即:源碼方式和源碼+預(yù)編譯方式。前者僅在數(shù)據(jù)庫中保存存儲過程的定義,后者同時保存定義和編譯碼。
存儲過程可重復(fù)執(zhí)行,執(zhí)行請求可以來自交互控制臺、客戶端應(yīng)用或者被其他存儲過程調(diào)用。交互式是最簡單的調(diào)用方式,一般只能使用輸入?yún)?shù)。被其他存儲過程調(diào)用的方法和高級語言中的函數(shù)調(diào)用很相似,可以使用不同類型的參數(shù),甚至可以使用和/或修改調(diào)用者的局部變量或過程參數(shù)。客戶端應(yīng)用方式則一般通過ODBC或JDBC的接口激活存儲過程,這時需要使用轉(zhuǎn)義序列發(fā)出調(diào)用: {call〈過程名〉[(〈參數(shù)列表〉)]},或者使用問號(?)接受過程的返回結(jié)果:{?=call〈過程名〉[(〈參數(shù)列表〉)]}。
客戶端應(yīng)用調(diào)用過程時的實參個數(shù)、類型等取決于存儲過程的定義,如果沒有形參,就不需要給出實參列表。參數(shù)可以是常量,也可以是問號(?)標識的動態(tài)實參。JDBC使用可調(diào)用語句對象的set×××方法(這里的“×××”代表某個ODBC數(shù)據(jù)類型,后面類似的情況表示相同的含義)給出調(diào)用的實參值。但有些數(shù)據(jù)庫系統(tǒng)的ODBC和/或JDBC驅(qū)動程序可能不支持存儲過程的調(diào)用。ODBC 的SQLGetInfo和JDBC 的方法DatabaseMetaData.supportsStoredProcedures分別能夠獲得數(shù)據(jù)源對存儲過程的支持信息。
執(zhí)行存儲過程時,一般由SP管理器對存儲過程塊進行詞法和語法分析,然后SP管理器和SQL執(zhí)行器協(xié)同工作,完成存儲過程的執(zhí)行。
2. 主要特點
存儲過程能夠同時使用SQL語句和流程控制語句處理數(shù)據(jù)。使用存儲過程的主要優(yōu)點有:
(1)增強了SQL語言的功能和靈活性: 存儲過程可以使用流程控制語句,有很強的靈活性,可以完成復(fù)雜的邏輯判斷與控制和較復(fù)雜的運算。
(2)優(yōu)化性能: 在運行存儲過程前,數(shù)據(jù)庫服務(wù)器對其進行優(yōu)化編譯,包括多SQL語句優(yōu)化等,這能夠大大改善SQL語句的性能,提高執(zhí)行速度。
(3)降低網(wǎng)絡(luò)的通信量: 存儲過程保持在服務(wù)器端,執(zhí)行全部邏輯流程僅需要向服務(wù)器發(fā)送一次過程執(zhí)行請求和對應(yīng)參數(shù),避免了交互模式下處理邏輯執(zhí)行中額外的中間通信開銷。
(4)可維護性高,便于部署應(yīng)用: 將全局處理定義為存儲過程,當處理發(fā)生變化時,可能只需修改存儲過程、重新發(fā)布所影響的數(shù)據(jù)就可完成系統(tǒng)升級。
此外,存儲過程由于增加了流程控制能力,設(shè)計和執(zhí)行性能對實現(xiàn)邏輯有很大的依賴性。設(shè)計者的水平可能嚴重影響存儲過程的運行質(zhì)量,也就是說提高了對應(yīng)用開發(fā)者編程能力的要求。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。