資料庫—預存程序。,資料庫預存程序

來源:互聯網
上載者:User

資料庫—預存程序。,資料庫預存程序

預存程序:

預存程序(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
記住預存程序中,語句結尾一定要有分號
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.