資料庫—預存程序。,資料庫預存程序
預存程序:
預存程序(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 陳述式集,經編譯後儲存在資料庫中,使用者通過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。預存程序是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程式都應該用到預存程序。
預存程序的建立:
選中預存程序,右擊——建立預存程序,則出現下面的代碼。
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<Author,,Name>-- Create date: <Create Date,,>-- Description:<Description,,>-- =============================================CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> -- Add the parameters for the stored procedure here<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON; -- Insert statements for procedure hereSELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>ENDGO
建好的預存程序:
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<Author,,Name>-- Create date: <Create Date,,>-- Description:<Description,,>-- =============================================ALTER PROCEDURE [dbo].[PROC_SettleAccount]-- Add the parameters for the stored procedure here@Recharge numeric(18,2) ,@ReturnM numeric(18,2),@Income numeric(18,2),@UserName char(10),@SetDate char(10),@SetTime char(10)ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON; -- Insert statements for procedure hereinsert into Bill (Recharge ,ReturnM ,Income ,UserName ,SetDate ,SetTime )values (@Recharge ,@ReturnM ,@Income ,@UserName ,@SetDate ,@SetTime )update RechargeRecords set SettleAccountState ='已結賬' where UserName =@UserName and SettleAccountState ='未結賬'update ReturnMoneyRecords set SettleAccountState ='已結賬' where UserName =@UserName and SettleAccountState ='未結賬'update Cards set SettleAccountState ='已結賬' where UserName =@UserName and SettleAccountState ='未結賬'END
預存程序的使用:
Public Function SettleAccount(bill As Entity.Bill) As Boolean Implements IDAL.IBill.SettleAccount Dim cmdtext As String cmdtext = "PROC_SettleAccount" '用預存程序的名稱來替換SQL語句 bill.SetDate = Format(Now, "yyyy-MM-dd") '獲得當前日期 bill.SetTime = Format(Now, "HH:mm:ss") '獲得目前時間 '添加參數 Dim sqlparameter As SqlParameter() = {New SqlParameter("@Recharge", bill.Recharge), New SqlParameter("@ReturnM", bill.ReturnM), New SqlParameter("@Income", bill.Income), New SqlParameter("@UserName", bill.UserName), New SqlParameter("@SetDate", bill.SetDate), New SqlParameter("@SetTime", bill.SetTime)} Dim helper As New SqlHelper Dim flag As Boolean '中間的參數變為預存程序特用的參數 flag = helper.ExecAddDelUpdate(cmdtext, CommandType.StoredProcedure, sqlparameter) Return flag End Function
只要將預存程序的名字替換SQL的語句。在執行的時候,也要換成預存程序特用的參數。
預存程序的優點:
1.重複使用。預存程序可以重複使用,從而可以減少資料庫開發人員的工作量。2.提高效能。預存程序在建立的時候在進行了編譯,將來使用的時候不再重新翻譯。一般的SQL語句每執行一次就需要編譯一次,所以使用預存程序提高了效率。3.減少網路流量。預存程序位於伺服器上,調用的時候只需要傳遞預存程序的名稱以及參數就可以了,因此降低了網路傳輸的資料量。4.安全性。參數化的預存程序可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於預存程序。詳見百度百科
總結:使用預存程序,在一定程度上減少了代碼量,又嘗試使用不曾用過得東西,會有成就感。
資料庫中預存程序有什作用?
第一:預存程序因為SQL語句已經預編繹過了,因此啟動並執行速度比較快。
第二:預存程序可以接受參數、輸出參數、返回單個或多個結果集以及傳回值。可以向程式返回錯誤原因。
第三:預存程序運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程式運行。
第四:預存程序主要是在伺服器上運行,減少對客戶機的壓力。
第五:預存程序可以包含程式流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了資料邏輯。
第六:預存程序可以在單個預存程序中執行一系列 SQL 語句。
第七:預存程序可以從自己的預存程序內引用其它預存程序,這可以簡化一系列複雜語句。
其實預存程序還可以控制許可權,比如一個表不直接允許使用者直接存取,但要求允許使用者訪問和修改其中一個或多個欄位,那就可以通過一個預存程序來實現並允許該使用者使用該預存程序。
還有,如果多條SQL語句執行過程中,過程環節返回了資料作為後面環節的輸入資料,如果直接通過SQL語句執行,勢必導致大量的資料通過網路返回到客戶機,並在客戶機運算;如果封裝在預存程序中,則將運算放在伺服器進行,不但減少了客戶機的壓力,同時也減少了網路流量,提高了執行的效率。
資料庫中的預存程序怎使用 解
關鍵字:procedure
例子:
SQL> create [or replace] procedure procedure_name is
begin
--開始執行
insert into test('10001','Visket');
end;
/
以上操作就能為test表添加一條資訊
執行預存程序procedure用的命令是exec
記住預存程序中,語句結尾一定要有分號