什麼是預存程序?

來源:互聯網
上載者:User
定義:
將常用的或很複雜的工作,預先用SQL語句寫好並用一個指定的名稱儲存起來, 那麼以後要叫資料庫提供與已定義好的預存程序的功能相同的服務時,只需調用execute,即可自動完成命令。
講到這裡,可能有人要問:這麼說預存程序就是一堆SQL語句而已啊?
Microsoft公司為什麼還要添加這個技術呢?
那麼預存程序與一般的SQL語句有什麼區別呢?
預存程序的優點:
1.預存程序只在創造時進行編譯,以後每次執行預存程序都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用預存程序可提高資料庫執行速度。
2.當對資料庫進行複雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此複雜操作用預存程序封裝起來與資料庫提供的交易處理結合一起使用。
3.預存程序可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此使用者才具有對指定預存程序的使用權
預存程序的種類:
1.系統預存程序:以sp_開頭,用來進行系統的各項設定.取得資訊.相關管理工作,
如 sp_help就是取得指定對象的相關資訊
2.擴充預存程序 以XP_開頭,用來叫用作業系統提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.使用者自訂的預存程序,這是我們所指的預存程序
常用格式
Create procedure procedue_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解釋:
output:表示此參數是可傳回的
with {recompile|encryption}
recompile:表示每次執行此預存程序時都重新編譯一次
encryption:所建立的預存程序的內容會被加密
如:
表book的內容如下
編號 書名 價格
001 C語言入門 $30
002 PowerBuilder報表開發 $52
執行個體1:查詢表Book的內容的預存程序
create proc query_book
as
select * from book
go
exec query_book
執行個體2:加入一筆記錄到表book,並查詢此表中所有書籍的總金額
Create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as
insert book(編號,書名,價格) Values(@param1,@param2,@param3)
select @param4=sum(價格) from book
go
執行例子:
declare @total_price money
exec insert_book '003','Delphi 控制項開發指南',$100,@total_price
print '總金額為'+convert(varchar,@total_price)
go
預存程序的3種傳回值:
1.以Return傳回整數
2.以output格式傳回參數
3.Recordset
傳回值的區別:
output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的用戶端中
執行個體3:設有兩個表為Product,Order,其表內容如下:
Product
產品編號 產品名稱 客戶訂數
001 鋼筆 30
002 毛筆 50
003 鉛筆 100
Order
產品編號 客戶名 客戶訂金
001 南山區 $30
002 羅湖區 $50
003 寶安區 $4
請實現按編號為串連條件,將兩個表串連成一個暫存資料表,該表只含編號.產品名.客戶名.訂金.總金額,
總金額=訂金*訂數,暫存資料表放在預存程序中
代碼如下:
Create proc temp_sale
as
select a.產品編號,a.產品名稱,b.客戶名,b.客戶訂金,a.客戶訂數* b.客戶訂金 as總金額
into #temptable from Product a inner join Order b on a.產品編號=b.產品編號
if @@error=0
print 'Good'
else
&n bsp; print 'Fail'
go

預存程序介紹
一、先介紹一下什麼是預存程序
預存程序是利用SQL Server所提供的Tranact-SQL語言所編寫的程式。Tranact-SQL語言是SQL Server提供專為設計資料庫應用程式的語言,它是應用程式和SQL Server資料庫間的主要程式式設計介面。它好比Oracle資料庫系統中的Pro-SQL和Informix的資料庫系統能夠中的Informix- 4GL語言一樣。這類語言主要提供以下功能,讓使用者可以設計出符合引用需求的程式:
1)、變數說明
2)、ANSI相容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內建函式

二、預存程序的書寫格

CREATE PROCEDURE [擁有者.]預存程序名[;程式編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程式行

其中預存程序名不能超過128個字。每個預存程序中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:

@參數名 資料類型 [VARYING] [=內定值] [OUTPUT]

每個參數名前要有一個“@”符號,每一個預存程序的參數僅為該程式內部使用,參數的類型除了IMAGE外,其他SQL Server所支援的資料類型都可使用。
[=內定值]相當於我們在建立資料庫時設定一個欄位的預設值,這裡是為這個參數設定預設值。[OUTPUT]是用來指定該參數是既有輸入又有輸出 值的,也就是在調用了這個預存程序時,如果所指定的參數值是我們需要輸入的參數,同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出 參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。

例子:
CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE ordered=@o_id

例子說明:
該例子是建立一個簡單的預存程序order_tot_amt,這個預存程序根據使用者輸入的定單ID號碼(@o_id),由定單明細表 (orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給 調用這一預存程序的程式

三、在SQL Server中執行預存程序

在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt

以上代碼是執行order_tot_amt這一預存程序,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果

sql語句執行的時候要先編譯,然後執行。預存程序就是編譯好了的一些sql語句。用的時候直接就可以用了。

預存程序是由流量控制和SQL語句書寫的過程,這個過程經編譯和最佳化 後儲存在資料庫伺服器中,使用時只要調用即可。在ORACLE中,若干個 有聯絡的過程可以組合在一起構成程式包。
使用預存程序有以下的優點:
* 預存程序的能力大大增強了SQL語言的功能和靈活性。預存程序可 以用流量控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的 運算。
* 可保證資料的安全性和完整性。
# 通過預存程序可以使沒有許可權的使用者在控制之下間接地存取資料庫,從而保證資料的安全。
# 通過預存程序可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
* 再運行預存程序前,資料庫已對其進行了文法和句法分析,並給出 了最佳化執行方案。這種已經編譯好的過程可極大地改善SQL語句的效能。 由於執行SQL語句的大部分工作已經完成,所以預存程序能以極快的速度執 行。
* 可以降低網路的通訊量。
* 使體現企業規則的運算程式放入資料庫伺服器中,以便:
# 集中控制。
# 當企業規則發生變化時在伺服器中改變預存程序即可,無須修改 任何應用程式。企業規則的特點是要經常變化,如果把體現企業規則的運 算程式放入應用程式中,則當企業規則發生變化時,就需要修改應用程式 工作量非常之大(修改、發行和安裝應用程式)。如果把體現企業規則的 運算放入預存程序中,則當企業規則發生變化時,只要修改預存程序就可 以了,應用程式無須任何變化。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.