MYSQL儲存過程中的IN OUT和INOUT

2022-02-26 10:05:26 字數 1037 閱讀 6687

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

MYSQL儲存過程入門1 語法以及in,out區別

1.什麼是儲存過程?其實儲存過程就是預編譯了的sql語句。2.優點 1 提速 只需要經過一次預編譯,以後就可以直接呼叫該儲存過程。如若有數百次的sql語句執行,儲存過程更快速,因為其經過了預編譯。2 省流量 如有數百條sql語句需要執行,就要傳送數百條sql語句的流量,而儲存過程一條即可。3 安全 ...

Mysql的儲存過程中的異常

以前看到一篇mysql的儲存過程,覺得很簡單 要使用mysql的儲存過程,需要 1 mysql的版本在5.0以上,低版本的海不支援儲存過程 2 資料表應該是innodb的,其他格式的不支援事務 做乙個實驗 建立兩個表,在儲存過程中向兩個表插入資料,使向第一表的插入操作執行成功,向第二個表的操作執行失...

mysql儲存過程中變數的使用

在mysql儲存過程中,宣告乙個變數可以使用declare vi num 變數名 int 資料型別 的方式。還可以直接使用 變數名的方式,直接使用乙個變數。請看以下儲存過程 drop procedure if exists pro2 create procedure pro2 begin decla...