前面關係數據庫SQL之可編程性函數(用戶自定義函數)一文提到關係型數據庫提供了可編程性的函數、存儲過程、事務、觸發器及遊標,前文已介紹了函數,本文來介紹一下存儲過程的建立、執行、刪除。(仍是之前文中銀行系統爲例)sql
存儲過程是一組爲了完成特定功能的SQL語句集合,經編譯後存儲在數據庫中,用戶經過指定存儲過程的名稱並給出參數(若是該存儲過程帶有參數)來執行。數據庫
--建立存儲過程 CREATE PROC[EDURE] <存儲過程名稱> -- 添加存儲過程所需的參數 [ <@參數1> <參數類型1> [= 默認值] [OUTPUT], …… <@參數n> <參數類型n> [= 默認值] [IN|OUT|OUTPUT] ] AS BEGIN -- 這裏面能夠寫爲變量賦值語句 SQL語句塊 END
注意:編程
其中存儲過程名不能超過128個字,每一個存儲過程當中最多設定1024個參數;網絡
存儲過程所需的參數無關緊要,若是有參數爲帶參數存儲過程,沒有參數就是無參數存儲過程;函數
帶參數存儲過程參數後面有關鍵字
OUT|OUTPUT
爲帶輸出參數存儲過程;spa[IN|OUT|OUTPUT]介紹:code
IN:在參數後面加了
IN
關鍵字的表示爲輸入參數,默認的狀況就是輸入參數;圖片OUT:在參數後面加了
OUT
關鍵字的表示爲輸出參數;事務OUTPUT:在參數後面加了
OUTPUT
關鍵字表示爲輸入輸出參數,既是傳入參數也是輸出參數。ip
--調用存儲過程 EXEC<存儲過程名稱> [參數列表]
--刪除存儲過程 DROP PROC[EDURE] <存儲過程名稱>
/* * 查詢交易信息表中總的交易金額,以及支取和存入的總金額,並打印出來 */ --判斷存儲過程是否存在 --存在則刪除 if exists(select * from sysobjects where name = 'proc_getTransMoney') drop procedure proc_getTransMoney go --建立無參數存儲過程 create proc proc_getTransMoney as begin declare @sum_money money --交易總額 declare @get_money money --支出總額 declare @sav_money money --存入總額 select @sum_money = sum(TransMoney) from TransInfo select @get_money = sum(TransMoney) from TransInfo where TransType = '存款' select @sav_money = sum(TransMoney) from TransInfo where TransType = '取款' print '交易總額='+ltrim(convert(char,@sum_money)) print '存入總額='+ltrim(convert(char,@sav_money)) print '支出總額='+ltrim(convert(char,@get_money)) end go --執行存儲過程 exec proc_getTransMoney go /* * 查詢指定帳戶掛失的帳戶信息 */ --判斷存儲過程是否存在 --存在則刪除 if exists(select * from sysobjects where name = 'proc_getLostAccount') drop procedure proc_getLostAccount go --建立帶參數輸出存儲過程 create proc proc_getLostAccount -- @CId varchar(20) OUTPUT as begin select A.CustName as 姓名, A.IDCard AS 身份證號, A.TelePhone as 電話號碼, C.CardID as 銀行卡號,A.Address as 地址 from AccountInfo as A inner join CardInfo as C on A.CustID = C.CustID where C.CardID =@CId AND C.IsLost = '是' end go --執行存儲過程 declare @CardID varchar(20); set @CardID= '銀行卡號'; exec proc_getLostAccount @CardID output; print @CardID; go
*本文就介紹到這裏。
若有疑問請聯繫我。*
原文來自:簡書