MYSQL存儲過程中的IN、OUT和INOUT,不能簡單理解為一個方法的參數和返回值,而是面向整個過程上下文變量的。
一、MySQL 存儲過程參數(in)
基本可以理解為傳入function的參數,而如果該參數是個變量,那么整個procedure過程結束后,不會影響外部的變量值。 可以直接這樣: call abc(’a'); 這種情況直接給in類型的參數賦值。 針對上下文的情況: set @a=’aa’; 給一個變量賦值 call abc(@a); 這里@a作為一個in類型的參數傳給abc 不管這個procedure內部把這個參數賦予了什么值,之后再 selece @a; @a的值都還是’aa’。
二、MySQL 存儲過程參數(out)
可以理解為某個function要改變的外部變量,不管這個變量在外部是什么值,在內部的初始值都是null,而內部對它的影響將改變這個外部變量值。 直接給一個procedure傳一個out參數是沒有意義的,因為out值在procedure默認都會被初始為null。 針對上下文情況: set @b=’aa’; call abc(@b); @b作為一個out類型的變量傳進去,在這個procedure中對@b所對應的變量進行了操作,賦值了’cc’。 之后 select @b; @b是’cc’。 而且,@b的初始值對這個procedure是無效的,在procedure中@所對應的變量默認值為null。
三、MySQL 存儲過程參數(inout)
可以理解為一個function在內部聲明了global ,並可能對該變量值進行修改。 針對上下文情況: set @b =’aa’; call abc(@b); 在這個procedure中對b所對應的變量進行了操作,@所對應的procedure變量的初始值就是@b的值。 之后 select @b; 這時候,@b得值就是在procedure中被改變得值。