MYSQL存儲過程中的IN、OUT和INOUT


  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中被改變得值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM