mysql存儲過程中in、out、inout參數使用

in

代表輸入,意思說你的參數要傳到存過過程的過程裏面去。基本可以理解爲傳入function的參數,而如果該參數是個變量,那麼整個procedure過程結束後,不會影響外部的變量值。

/
案例功能:求1-n的和
開發者:徐守威
時間:2016-08-13
/
delimiter $
create procedure p1(in n int)
begin
declare total int default 0;
declare num int default 0;
while num < n do
set num:=num+1;
set total:=total+num;
end while;
select total;
end$**

調用 call p1(10)$

out

可以理解爲某個function要改變的外部變量,不管這個變量在外部是什麼值,在內部的初始值都是null,而內部對它的影響將改變這個外部變量值。

直接給一個procedure傳一個out參數是沒有意義的,因爲out值在procedure默認都會被初始爲null。

/
案例功能:求1-n的和
開發者:徐守威
時間:2016-08-13
*/
create procedure p2(in n int,out total int)
begin
declare num int default 0;
set total:=0;
while num < n do
set num:=num+1;
set total:=total+num;
end while;
end$**

調用 call p2(100,@sum)$//這裏的@sum就是我定義用來接收處處total的值
select @sum$

inout

既能輸入一個值又能傳出來一個值。可以理解爲一個function在內部聲明瞭global ,並可能對該變量值進行修改。

/
功能:傳一個年齡,自動讓年齡增長10歲
開發者:徐守威
時間:2016-08-13
/
create procedure p3(inout age int)
begin
set age:=age+10;
end$
注意:調用的時候,我這裏需要和大家聲明一下,inout型的參數值既是輸入類型又是輸出類型,你給它一個值,值不是變量,不是變量那out的時候它怎麼賦給這個值是不是?
因此我們需要先設置一個變量並初始化這個值,調用的時候直接傳這個變量即可。*

調用:
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章