沈 黎
(四川民族學院 計算機科學系,四川 康定 626001)
當今社會是一個信息社會,信息已成為繼勞動力、土地、資本之后的又一大資源.隨著世界經濟的發展,市場商品的種類越來越多,各個商品銷售單位進行交易的對象也越來越廣泛,信息量也不斷提升,要求的管理手段也越來越高.因而商品管理系統是一個銷售單位不可缺少的部分,它的內容對于公司的管理者和顧客來說都至關重要,商品管理系統應該能夠為用戶提供充足的信息和快捷的查詢手段[1].康定民族貿易公司已經實現了商品管理系統,但該公司的商品管理系統在設計上存在不足導致運行效率較低,主要體現在傳輸數據量大,網絡速度慢,保密性差,另外在商品管理系統中由于每次操作都要進行相關的語法檢查和編譯,使得系統響應的時間較慢并加重了服務器端的負擔,這對于查找、更新和維護都帶來了很多困難.由于存儲過程在創建時已經檢查了語法正確性并實現了編譯和優化,應用時可直接執行存儲過程,加快了執行速度,因此自定義存儲過程可以解決以上提到的商品管理系統中的不足.
存儲過程是一組為了完成特定功能的T—SQL語句集,經編譯后存儲在數據庫中.用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它[2].
使用自定義存儲過程訪問數據庫的優點主要體現在:(1)允許模塊化程序設計.只需創建一次存儲過程并將其放入數據庫,以后可在程序中多次調用該存儲過程,并可獨立于程序源代碼而單獨修改[3,4].(2)執行速度更快.存儲過程在執行時不需要再檢查語法、編譯,而且調用存儲過程可以大大減少同數據庫的交互次數.(3)減少網絡流量.一個需要數百行T-SQL代碼的操作由一條執行過程代碼的單獨語句就可以實現.(4)可作為安全機制使用.系統管理員通過對執行某一存儲過程權限進行限制,從而實現對相應數據訪問權限的限制,避免非授權用戶對數據的訪問,保證數據的安全[5].
創建存儲過程時,主要明確存儲過程名稱、輸出/輸入參數、所創建的存儲過程的功能等,語法格式如下:

自定義存儲過程的調用需要給出存儲過程的名稱,如果帶有參數,需要給出參數值.語法格式如下:

存儲過程的實現過程是由TStored Proc組件來執行,應用程序發出執行存儲過程的命令后,該組件立即將參數傳給BDE/IDAPI再由BDE/IDAPI把所有參數傳遞給DBMS,DBMS接收到參數后立即執行早已編譯好的存儲過程,并把執行結果傳遞給BDE/IDAPI[6]、[7].其技術框圖如下:

下面以康定民族貿易公司的商品管理系統為例,說明存儲過程的設計與實現.
該公司數據庫的主要表及關系模式如下:
Goods(商品號,商品名稱,庫存量,供應商,狀態,價格)
Coustomers(客戶編號,姓名,地址,電話,出生日期)
Orders(訂單號,商品名稱,客戶編號,數量,總金額,訂貨日期)
(1)創建一個存儲過程proc_1,該存儲過程用于查詢指定商品所對應的客戶信息.

調用存儲過程:EXEC proc_1‘春蘭空調’
(2)定義一個存儲過程,用來實現商品名稱不為空時,插入一條記錄,商品號由存儲過程產生.

存儲過程調用:declare@bj int
EXEC proc_2‘舒膚佳香皂’,10000.,‘寶潔中國有限公司’,1,7.00,@bj output
(3)創建一存儲過程,輸入客戶姓名返回訂購商品名稱,用值15表示用戶沒有提供參數.值-101表示輸入用戶名所訂購的商品不存在,值0表示操作成功.


本文實現了自定義存儲過程及其調用,并應用于康定民族貿易公司商品管理系統中,經過試運行,該公司已經在很大程度上提高了商品管理系統應用程序的運行性能,基本能保證數據的安全性與完整性,并簡化了客戶應用程序的編程,同時也降低了網絡信息流量,增強了應用系統的可維護性,解決了當前商品管理系統存在的不足..因此商品管理系統性能是否能夠最好的充分發揮,自定義存儲過程有著不可忽視的作用,自定義存儲過程不僅適用于商品管理系統,還可以推廣到其他行業的數據庫管理系統中.
〔1〕胡仲英.基于SQL存儲過程的進銷存系統的研究與實現[D].哈爾濱工業大學,2008.5.
〔2〕范立南.SQLserver2005實用教程(第二版)[M].北京:清華大學出版社,2006.12.
〔3〕谷震離,杜艮遠.SQL server數據庫應用程序中數據庫安全性研究[J].計算機工程與設計,2007(28).
〔4〕鄢愛蘭,鹿江春.數據庫存儲過程應用研究[J].華南大學學報(自然科學版),2006,20(2).
〔5〕郭琳.SQL server中的存儲過程研究[J].重慶文理學院學報(自然科學版),2007,26(4).
〔6〕吳正民.SQL網絡數據庫中存儲過程、觸發器及其應用方法[J].西南民族大學學報(自然科學版),2003,29(4).
〔7〕費楊潔.存儲過程在管理信息系統開發中的應用[J].河北科技學院學報(自然科學版),2007,37(3).