MySQL建立 呼叫儲存過程

2021-09-12 19:59:59 字數 1447 閱讀 3174

今天我們搞一搞mysql的儲存過程,過程中踩了一些小坑,算是做個總結歸納~

首先,我們了解一下儲存過程的建立語句:

create procedure `index_statistic`(in `flag` varchar(10),out `result` int,inout `num` int)

begin

if flag is not null then

#查詢語句

select

count(0) into result

from

a_table t

where t.flag = flag;

end if;

if num is not null then

#改變引數

select num*2 into num;

set flag=true;

end if;

end;

我們建立了乙個名叫index_statistic的儲存過程,它有三個引數,乙個是輸入引數flag,乙個是輸出引數result,乙個輸入輸出引數num。

我們開始呼叫我們剛才建立的儲存過程:

set @flag='false';                        #設定三個變數,用@符號區分這是變數

set @result=1;

set @num=1;

call index_statistic(@flag,@result); #呼叫儲存過程~注意引數位置應與定義時一一對應

select @flag,@result,@@num; #查詢變數值

執行結果如下(悠哈~): 

引數型別

3種引數型別:

in輸入引數:表示呼叫者向過程傳入值(傳入值可以是字面量或變數)

out輸出引數:表示過程向呼叫者傳出值(可以返回多個值)(傳出值只能是變數)

inout輸入輸出引數:既表示呼叫者向過程傳入值,又表示過程向呼叫者傳出值(值只能是變數)

讓我們來分析分析結果:

@flag引數是輸入引數,在呼叫過程中,我們修改了@flag的值,但是呼叫完後,@flag仍是我們初始化時的值,因為in傳入引數不會改變傳入的變數,@flag在我們此次呼叫中是區域性變數!

@result是輸出數,在呼叫時將查詢結果存入了變數@result,結果@result也確實被改變了值,@result在我們此次呼叫中是全域性變數!

@num是個輸入輸出引數,在儲存過程呼叫期間,這種型別的變數的值是可以被修改的!

MySQL 儲存過程 建立 檢視 呼叫 刪除

建立 delimiter create procedure my add in a int,in b int,out c int begin if a is null then set a 0 end if if b is null then set b 0 end if set c a b end...

mysql建立儲存過程 定時呼叫

mysql怎麼讓乙個儲存過程定時執行 檢視event是否開啟 show variables like sche 將事件計畫開啟 set global event scheduler 1 關閉事件任務 alter event e test on completion preserve disable ...

MySQL儲存過程的建立和呼叫

mysql儲存過程弱爆了。下面這個建立 任何地方不匹配都報錯,包括空格!delimiter begin 許可權檢查 by wuzude 2018 01 22 ver 1.0 declare rawsum int 1 default 0 行計數器 declare projid int 4 defaul...