1. 程式人生 > >mysql存儲過程中in、out、inout參數使用

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

mysql 存儲過程

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$**

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