今天我們搞一搞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...