儲存過程的格式

2021-06-04 16:27:42 字數 2825 閱讀 2560

create procedure procedure_name

[@parameter data_type][output]

[with]

as sql_statement

解釋:

output:表示此引數是可傳回的

with

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 into 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

print 'fail'

go * 儲存過程的能力大大增強了sql語言的功能和靈活性。儲存過程可以用流控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的 運算。

* 可保證資料的安全性和完整性。

# 通過儲存過程可以使沒有許可權的使用者在控制之下間接地訪問資料庫,從而保證資料的安全。

# 通過儲存過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。

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

* 可以降低網路的通訊量。

* 使體現企業規則的運算程式放入資料庫伺服器中,以便:

# 集中控制。

# 當企業規則發生變化時在伺服器中改變儲存過程即可,無須修改任何應用程式。企業規則的特點是要經常變化,如果把體現企業規則的運算程式放入應用程式中,則當企業規則發生變化時,就需要修改應用程式工作量非常之大(修改、發行和安裝應用程式)。如果把體現企業規則的運算放入儲存過程中,則當企業規則發生變化時,只要修改儲存過程就可以了,應用程式無須任何變化。

簡單講:

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量

4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

缺點  1:除錯麻煩,但是用 pl/sql developer 除錯很方便!彌補這個缺點。

3:重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。

4: 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。

mysql儲存過程格式 mysql儲存過程的寫法

可以使用 create procedure 語句建立儲存過程。資料庫儲存過程語法格式如下 create procedure 過程名 in out inout 引數名 資料型別 in out inout 引數名 資料型別 特性 過程體 delimiter create procedure myproc...

MySQL儲存過程時間格式轉換

儲存過程 時間格式轉換 時間格式專時間戳 createtime2 unix timestamp createtime1 時間戳轉時間格式 from unixtime invest time,y年 m月 d 後退3分鐘時間 set min time date sub createtime1,inter...

儲存過程接收JSON格式資料

前端有可能一次性上傳多筆記錄,並使用json序列化。現在在ms sql server 2016版本上,可以直接處理jso資料。如下面的前端序列化的資料 declare json string nvarchar max n source code 在資料庫中,建立一張表來儲存這些資料 建立儲存過程來接...