儲存過程(stored procedure)是使用transact-sql語言編寫的一段能實現指定功能的程式。其次,這種程式被sql server編譯好後,存放在sql server資料庫中。使用者可以通過儲存過程的名稱和引數傳遞呼叫這些具有指定功能的儲存過程。儲存過程也是資料庫物件。人們通常使用儲存過程提高資料庫的安全性和減少網路通訊資料量。是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的乙個重要物件。
①重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。
②減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。
③安全性。引數化的儲存過程可以防止sql注入式攻擊,而且可以將grant、deny以及revoke許可權應用於儲存過程。
簡單講:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權
有一點需要注意的是,一些網上盛傳的所謂的儲存過程要比sql語句執行更快的說法,實際上是個誤解,並沒有根據,包括微軟內部的人也不認可這一點,所以不能作為正式的優點,希望大家能夠認識到這一點。
①除錯麻煩,但是用 pl/sql developer 除錯很方便!彌補這個缺點。
②移植問題,資料庫端**當然是與資料庫相關的。但是如果是做工程型專案,基本不存在移植問題。
③重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。
④ 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。
下面來看看,我在機房重構中對儲存過程的乙個簡單應用吧。
為了防止sql注入式攻擊,為使我們的使用者登入過程更加簡單,我進行了以下應用:
①手動建立儲存過程如下圖:
②通過**建立儲存過程:
--建立乙個儲存過程判定使用者名稱密碼是否正確
create
procedure
isuserpwd @userid
nvarchar
(20),@pwd
nvarchar
(20),@result
bitoutput
asif
exists
(select * from user_info where userid = @userid and pwd = @pwd)
--若密碼正確返回值1
select @result = 1
else
select @result = 0
機房重構 儲存過程
在機房重構過程中七層的主線明白了以後就剩下大量的敲 了,這一過程無疑比較枯燥,因此有必要在機房中嘗試一些新東西,比如,儲存過程。那麼什麼是儲存過程呢?儲存過程是存放在伺服器上的預先編譯好的sql語句,在第一次執行時進行語句檢查和編譯,編譯好的儲存過程在快取記憶體中用於後續呼叫,這樣就可以使儲存過程執...
機房重構 儲存過程
儲存過程 儲存過程 stored procedure 是在大型 資料庫系統 重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。安全性。引數化的儲存過程可以防止sql注...
機房重構 儲存過程
什麼都不說直接上 使用儲存過程其他層的 相同只有dal層 不同.dal層 寫乙個檢查卡號是否存在,新增 public class chackcarddal implements idal.ichackcardidal 寫乙個方法 public function chackcard cardinfo ...