MySQL 儲存過程引數IN OUT INOUT對比
IN 引數:
- -- 建立測試儲存過程
-
-
delimiter //
-
create procedure p_in ( IN num int )
-
begin
-
select num;
-
set num=100;
-
select num;
-
end;
- //
-
delimiter ;
我設定使用者變數@num為1,將@num傳入p_in過程之中:
mysql> set @num=1;
Query OK, 0 rows affected (0.00 sec)
mysql> call p_in(@num);
+------+
| num |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
此時再次查詢@num發現@num仍為1:
mysql> select @num;
+------+
| @num |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
所以 IN 引數只是將變數在儲存過程內部做了修改,並沒有影響到外部,@num仍為1。
OUT 引數:
- -- 建立測試儲存過程
-
-
delimiter //
-
create procedure p_out ( OUT num int )
-
begin
-
select num;
-
set num=100;
-
select num;
-
end;
-
//
-
- delimiter ;
我設定@num為1,並呼叫p_out:
mysql> set @num=1;
Query OK, 0 rows affected (0.00 sec)
mysql> call p_out(@num);
+------+
| num |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
此時發現,過程的第一個select num為NULL,意味著@num無論是否有傳入的外部值,其初始值在過程內都為NULL。再次檢視@num值,發現之前即使我已經set @num=1,但是在儲存過程的呼叫下,仍然被修改為100,說明OUT引數將引數值傳回給呼叫者。
mysql> select @num;
+------+
| @num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
INOUT 引數:
- -- 建立測試儲存過程
-
-
delimiter //
-
create procedure p_inout ( INOUT num int )
-
begin
-
select num;
-
set num=100;
-
select num;
-
end;
-
//
-
- delimiter ;
同樣的,我首先將@num置為1,並呼叫p_inout:
mysql> set @num=1;
Query OK, 0 rows affected (0.00 sec)
mysql> call p_inout(@num);
+------+
| num |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
+------+
| num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
發現返回結果與p_in一致,說明@num為1的值,已經傳入儲存過程。
再次查詢呼叫過程後的@num,發現@num為100,此時又與p_out一致,同樣,說明OUT引數將引數值傳回給呼叫者。
mysql> select @num;
+------+
| @num |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
然後
mysql> drop procedure p_in ;
Query OK, 0 rows affected (0.00 sec)
mysql> drop procedure p_inout ;
Query OK, 0 rows affected (0.00 sec)
mysql> drop procedure p_out ;
Query OK, 0 rows affected (0.00 sec)
那麼總結如下:
IN引數:
僅需要將資料傳入儲存過程,並不需要返回計算後的該值。
OUT引數:
不接受外部傳入的資料,僅返回計算之後的值。
INOUT引數:
需要資料傳入儲存過程經過呼叫計算後,再傳出返回值。
作者公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1769098/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程in、out、inout引數示例與總結MySql儲存過程
- 詳解MySQL儲存過程引數有三種型別(in、out、inout)MySql儲存過程型別
- mysql儲存過程的引數MySql儲存過程
- mysql 儲存過程MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- MySQL---------儲存過程MySql儲存過程
- mysql儲存過程整理MySql儲存過程
- 造數儲存過程儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- mySql 儲存過程與函式MySql儲存過程函式
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- MySQL儲存過程語句及呼叫MySql儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- Mysql 5.7儲存過程的學習MySql儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- MySQL儲存過程的建立和使用MySql儲存過程
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- MySQL入門系列:儲存程式(三)之儲存過程簡介MySql儲存過程
- MySQL自定義函式與儲存過程MySql函式儲存過程
- Mysql儲存過程基礎(案例+程式碼)MySql儲存過程
- Mysql儲存過程中使用多遊標MySql儲存過程
- mysql檢視儲存過程show procedure status;MySql儲存過程
- MySQL 儲存過程進行切換表MySql儲存過程
- [MySQL光速入門]015 聊聊儲存過程MySql儲存過程
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- mysql多次呼叫儲存過程的問題MySql儲存過程
- MySQL全面瓦解16:儲存過程相關MySql儲存過程
- MySQL-09-mysql 儲存過程入門介紹MySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程