MySQL學習筆記 十 儲存過程

2021-09-26 10:56:39 字數 2938 閱讀 6760

儲存過程(stored procedure)是一種在資料庫中儲存複雜程式,以便外部程式呼叫的一種資料庫物件。

儲存過程是為了完成特定功能的sql語句集,經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。

優點:

缺點

語法格式:

create

procedure

《過程名》

([過程引數[

,…]]

)《過程體》

[過程引數[

,…]]的格式 : [in|

out|

inout

]《引數名》

《型別》

例如:

# 修改命令結束識別符號

delimiter $

# 新增乙個儲存過程: 增新一條訂單記錄後, 如果商品表中對應的商品庫存小於零則回滾, 否則進行提交

create

procedure

`insertorder`

(in _o_cuid int(11

),in _o_cid int(1

),in _o_num int(11

),out flag int(11

))# 返回值flag表示是否新增成功

begin

set@_c_num=0

;# 臨時變數:用於儲存新增後商品表中的對應商品的庫存

set autocommit=0;

# 取消自動提交

start

transaction

;# 開始事務

insert

into

`order

`(o_cuid,o_cid,o_num)

values

(_o_cuid,_o_cid,_o_num)

;# 新增訂單

set@_c_num=(

select c_num from commodity where c_id=_o_cid)

;# 獲取新增後的庫存

if@_c_num

>=

0# 如果新增後庫存大於等於零, 則提交, 並且flag設為1

then

commit

;set flag =1;

else

rollback

;# 如果新增後庫存小於零, 則回滾, 並且flag設為0

set flag =0;

endif

;set autocommit=1;

# 開啟自動提交

end$

# 新增乙個儲存過程: 在更新一條訂單記錄後, 如果商品表中對應的商品庫存小於零則回滾, 否則進行提交

create

procedure

`updateorder`

(in _o_id int(11

),in _o_num int(11

),out flag int(11

))begin

set@_c_num=0

;set autocommit=0;

start

transaction

;update

`order

`set o_num=_o_num where o_id=_o_id;

set@_c_num=(

select c_num from commodity where c_id=

(select o_cid from

`order

`where o_id=_o_id));

if@_c_num

>

0then

commit

;set flag =1;

else

rollback

;set flag =0;

endif

;set autocommit=1;

end$

# 修改命令結束識別符號

delimiter

;

注意:

和觸發器一樣, 建立儲存過程的前後都要修改命令結束識別符號

**mysql 儲存過程中的關鍵語法: **

引數

mysql儲存過程的引數用在儲存過程的定義,共有三種引數型別,in,out,inout,形式如:

create

procedure 儲存過程名([in

|out

|inout

]引數名 引數型別,..

.)

變數

set@x=

1;

注意:

mysql所有的變數都是字串 當你進行運算的時候 mysql會嘗試進行數值的轉換 如果轉換不成功則丟擲異常

語法格式:

call pro_name(

[parameter[,.

....

.]])

;

例如:

set@x=

-1;# 定義乙個變數,用來接受insertorder的返回值

call insertorder(1,

10,5,

@x);# 呼叫insertorder儲存過程,新增了一條記錄:1號客戶購買了5件10號商品, 並將是否新增成功儲存在了@x變數中

select@x;

# 輸出@x變數的值

drop

procedure 儲存過程名;

mysql中修改儲存過程可以通過刪除原儲存過程,再以相同的名稱建立新的儲存過程。

MYSQL學習筆記(十)儲存過程(續)

1.儲存過程 是sql語句和控制語句的集合,以乙個名稱儲存並作為乙個單元處理。2.引數型別 輸入型別 in表示該引數的值必須在呼叫儲存過程時指定 輸出型別 out表示該引數的值可以被儲存過程改變,並且可以返回 輸入 輸出型別 inout 表示該引數在呼叫時指定,並且可以被改變和返回 in out區別...

mysql學習筆記 儲存過程

sql view plain copy use test drop table if exists t8 create table t8 s1 int,primary key s1 drop procedure if exists handlerdemo delimiter create proce...

Mysql儲存過程學習筆記

在pl sql中,主要包括declare部分 宣告引數 begin.end部分和例外部分。mysql儲存過程建立的格式 create procedure過程名 過程引數 特性.過程體 選中 函式右鍵 新建建立 完成 輸入函式體 儲存名字 語法 create procedire 儲存過程命名 開始 函...