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和Oracle對比之儲存過程MySqlOracle儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- oracle儲存過程plsql_sp_多個out引數測試語法Oracle儲存過程SQL
- tcbs_批量儲存過程_輸出引數out與異常的關係儲存過程
- 在sqlplus中呼叫in out輸入輸出引數的儲存過程SQL儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- 使用in out引數模式的過程模式
- 使用out引數模式的過程模式
- Mysql 儲存過程MySql儲存過程
- 帶輸出引數的儲存過程儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- Java呼叫儲存過程(帶輸出引數)Java儲存過程
- 動態呼叫帶引數的儲存過程儲存過程
- oracle儲存過程將引數字串分割sqlOracle儲存過程字串SQL
- mysql儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- [MYSQL -23儲存過程]MySql儲存過程
- MYSQL儲存過程管理MySql儲存過程
- mysql儲存過程例子MySql儲存過程
- mysql的儲存過程MySql儲存過程
- 造數儲存過程儲存過程
- 【Mysql】Mysql儲存過程學習MySql儲存過程
- SQL Server-儲存過程(Procedure),帶入引數和出引數SQLServer儲存過程
- SQL Server系統儲存過程和引數示例SQLServer儲存過程
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- 使用帶有輸出引數的儲存過程儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- mysql儲存過程案例解析MySql儲存過程
- mysql儲存過程詳解MySql儲存過程
- mysql儲存過程的修改MySql儲存過程
- MySQL儲存過程SAVEPOINT ROLLBACK toMySql儲存過程
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- mysql 儲存過程和事件排程MySql儲存過程事件