Stored Procedure 儲存過程

2021-06-10 01:58:16 字數 3010 閱讀 8120

儲存過程就是已經編譯好的、優化過的放在資料庫伺服器中的一些sql語句;可**用程式直接呼叫。使用儲存過程有以下幾個優點:

1、執行速度比普通的sql語句快

再執行儲存過程前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善sql語句的效能。 由於執行sql語句的大部分工作已經完成,所以儲存過程能以極快的速度執行。

2、便於集中控制

當企業規則變化時,只需要在資料庫的伺服器中修改相應的儲存過程,而不需要逐個的在應用程式中修改,應用程式保持不變即可,這樣就省去了修改應用程式工作量。

3、可以降低網路的通訊量

4、保證資料庫的安全性和完整性

通過儲存過程不僅可以使沒有許可權的使用者在控制之下間接地訪問資料庫,保證資料的安全;而且可以使相關的動作在一起發生,從而可以維護資料庫的完整性。

5、靈活性

儲存過程可以用流控制語句編寫,具有很強的靈活性,可以完成複雜的判斷和運算,可以根據條件執行不通sql語句。

儲存過程的語法:

create proc [ edure ] procedure_name [ ; number ]

[ [ varying ] [ = default ] [ output ]

] [ ,...n ][ with

]

[ for replication ]

as sql_statement [ ...n ]

****其中: 表示可選

引數解釋:

procedure_name

新儲存過程的名稱。過程名必須符合識別符號規則,且對於資料庫及其所有者必須唯一。有關更多資訊,請參見使用識別符號。

要建立區域性臨時過程,可以在 procedure_name 前面加乙個編號符 (#procedure_name),要建立全域性臨時過程,可以在 procedure_name 前面加兩個編號符 (##procedure_name)。完整的名稱(包括 # 或 ##)不能超過 128 個字元。指定過程所有者的名稱是可選的。

;number

是可選的整數,用來對同名的過程分組,以便用一條 drop procedure 語句即可將同組的過程一起除去。例如,名為 orders 的應用程式使用的過程可以命名為 orderproc;1、orderproc;2 等。drop procedure orderproc 語句將除去整個組。如果名稱中包含定界識別符號,則數字不應包含在識別符號中,只應在 procedure_name 前後使用適當的定界符。

@parameter

過程中的引數。在 create procedure 語句中可以宣告乙個或多個引數。使用者必須在執行過程時提供每個所宣告引數的值(除非定義了該引數的預設值)。儲存過程最多可以有 2.100 個引數。

使用 @ 符號作為第乙個字元來指定引數名稱。引數名稱必須符合識別符號的規則。每個過程的引數僅用於該過程本身;相同的引數名稱可以用在其它過程中。預設情況下,引數只能代替常量,而不能用於代替表名、列名或其它資料庫物件的名稱。有關更多資訊,請參見 execute。

data_type

引數的資料型別。所有資料型別(包括 text、ntext 和 image)均可以用作儲存過程的引數。不過,cursor 資料型別只能用於 output 引數。如果指定的資料型別為 cursor,也必須同時指定 varying 和 output 關鍵字。有關 sql server 提供的資料型別及其語法的更多資訊,請參見資料型別。

說明  對於可以是 cursor 資料型別的輸出引數,沒有最大數目的限制。

varying

指定作為輸出引數支援的結果集(由儲存過程動態構造,內容可以變化)。僅適用於游標引數。

default

引數的預設值。如果定義了預設值,不必指定該引數的值即可執行過程。預設值必須是常量或 null。如果過程將對該引數使用 like 關鍵字,那麼預設值中可以包含萬用字元(%、_、 和 [^])。

output

表明引數是返回引數。該選項的值可以返回給 exec[ute]。使用 output 引數可將資訊返回給呼叫過程。text、ntext 和 image 引數可用作 output 引數。使用 output 關鍵字的輸出引數可以是游標佔位符。

n表示最多可以指定 2.100 個引數的佔位符。

recompile 表明 sql server 不會快取該過程的計畫,該過程將在執行時重新編譯。在使用非典型值或臨時值而不希望覆蓋快取在記憶體中的執行計畫時,請使用 recompile 選項。

encryption 表示 sql server 加密 syscomments 表中包含 create procedure 語句文字的條目。使用 encryption 可防止將過程作為 sql server 複製的一部分發布。

說明  在公升級過程中,sql server 利用儲存在 syscomments 中的加密注釋來重新建立加密過程。

for replication

指定不能在訂閱伺服器上執行為複製建立的儲存過程。.使用 for replication 選項建立的儲存過程可用作儲存過程篩選,且只能在複製過程中執行。本選項不能和 with recompile 選項一起使用。

as指定過程要執行的操作。

sql_statement

過程中要包含的任意數目和型別的 transact-sql 語句。但有一些限制。

n是表示此過程可以包含多條 transact-sql 語句的佔位符。

乙個簡單的儲存過程:

create procedure dbo.select_all as

select * from my_test

儲存過程 Stored Procedure

create proc or procedure sp name 引數名 型別 引數名 型別 output with as begin end exec call sp name 引數名 刪除儲存過程 drop procedure sp name 大多數常用資料都支援儲存過程,但是各類資料庫都有自己...

stored procedure 儲存過程

儲存過程 stored procedure 計算機用語,是一組為了完成特定功能的sql語句集,是利用sql server所提供的transact sql語言所編寫的程式。經編譯後儲存在資料庫中。儲存過程是資料庫中的乙個重要物件,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它...

在stored procedure中使用動態SQL

所謂動態sql,是相對靜態sql而言的,靜態sql在編譯的時候就已經知道它的全部內容了。而動態sql指令碼是在編譯的時候還不完整,直到執行過程中才能確定的sql語句。在db2 400中實現動態sql的方式很多,但一般都採用prepare的方式來實現,下面是在sqlc中實現動態sql的例項 exec ...