數據庫(2)——存儲過程

可以把存儲過程當做:把一系列語句合併到一起的這麼一個整體

我覺得舉例說明比較好,給你個例子:

先將【表1】中ID號爲50—2000的記錄刪除、
再將【表2】中的這些記錄的狀態(STATUS)改爲“已解除”:

delete 表1 where ID > 50 and ID < 2000
update 表2 set STATUS = '已解除' where ID > 50 and ID < 2000

正常情況下,以上兩條語句分步執行就可以了,如果要用存儲過程呢?

先建立存儲過程(以下的語法爲Sybase數據庫的,其他數據庫類同):

create procedure PRC_TEST (@start_ID int, @end_ID int)
as
begin
delete 表1 where ID > @start_ID and ID < @end_ID
update 表2 set STATUS = '已解除' where ID > @start_ID and ID < @end_ID
end

好了,執行這個語句,就將存儲過程PRC_TEST提交到數據庫裏了,它有兩個參數:start_ID int 和 end_ID,代表起始和終止ID號,類型爲整數型int

怎麼用這個存儲過程呢? 這樣執行:exc PRC_TEST 50, 2000

執行時,它先得到了兩個參數,50、2000,分別賦值給start_ID int 和 end_ID,然後按照這兩個參數分步執行封裝在存儲過程裏的那兩條語句了。

如果你這樣執行:exc PRC_TEST 220, 8660
就是處理兩個表中ID介於220—8660之間的記錄了。
----------------------------------------------------------------------------

你也許會問了,既然可以分步執行的幾句SQL,爲什麼要費力的寫成存儲過程啊?

主要是(我的經驗和認識):

1、使數據處理參數化,對經常使用的一系列SQL進行封裝,使其成爲一個存儲過程的整體,在每次執行時只要更換執行參數即可,不用去改裏面每句SQL的where子句

2、★★這個很重要★★,假設你要循環處理某些數據,例如需要使用“遊標”、“Do...while...語句”…………時,就要用到存儲過程(或觸發器)

=====================================================================

最後給你轉一個短文吧,這是書面上的概念:
將常用的或很複雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那麼以後要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
那麼存儲過程與一般的SQL語句有什麼區別呢?
存儲過程的優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
2.當對數據庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此複雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3.存儲過程可以重複使用,可減少數據庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
存儲過程的種類:
1.系統存儲過程:以prc_(或sp_)開頭,用來進行系統的各項設定.取得信息.相關管理工作,
如 sp_help就是取得指定對象的相關信息
2.擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用戶自定義的存儲過程,這是我們所指的存儲過程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章