1. 程式人生 > >mysql儲存過程引數輸入輸出IN/OUT/INOUT

mysql儲存過程引數輸入輸出IN/OUT/INOUT

mysql儲存過程中,IN用來輸入引數,OUT用來輸出引數,INOUT輸入和輸出。

  1. IN引數
    建立儲存過程
mysql> delimiter //
mysql> create procedure proce1(IN count int)
    -> begin
    -> select count;
    -> set count = 2;
    -> select count;
    -> end
    -> //

執行儲存過程

mysql> set @count = 1//
Query OK,
0 rows affected (0.00 sec) mysql> call proce1(@count)// +-------+ | count | +-------+ | 1 | +-------+ 1 row in set (0.00 sec) +-------+ | count | +-------+ | 2 | +-------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> select @count -> // +--------+ | @count | +--------+
| 1 | +--------+ 1 row in set (0.00 sec) mysql>

在上面儲存過程中,我們定義了一個引數@count,賦值為1,傳入到儲存過程中,在儲存過程中賦值為2,當儲存過程結束後,列印@count的值依舊是1.

  1. OUT引數
    建立儲存過程
mysql> create procedure proce_out(OUT count int)
    -> begin
    -> select count;
    -> set count = 2;
    -> select count;
    -
> end// Query OK, 0 rows affected (0.05 sec)

執行儲存過程

mysql> set @count=1;
    -> call proce_out(@count);
    -> select @count;
    -> //
Query OK, 0 rows affected (0.00 sec)

+-------+
| count |
+-------+
|  NULL |
+-------+
1 row in set (0.00 sec)

+-------+
| count |
+-------+
|     2 |
+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+--------+
| @count |
+--------+
|      2 |
+--------+
1 row in set (0.00 sec)

mysql> 

@count在外面賦值為1,因為引數是OUT型別,所以儲存過程中打印出來為null,儲存過程中賦值為2,儲存過程結束,檢視@count的值,依舊為2。

  1. INOUT 輸入輸出引數
    建立儲存過程
mysql> create procedure proce_inout(INOUT count int)
    -> begin
    -> select count;
    -> set count = 2;
    -> select count;
    -> end;
    -> //

執行儲存過程

mysql> set @count = 1;
    -> call proce_inout(@count);
    -> select @count;
    -> //
Query OK, 0 rows affected (0.00 sec)

+-------+
| count |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

+-------+
| count |
+-------+
|     2 |
+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+--------+
| @count |
+--------+
|      2 |
+--------+
1 row in set (0.00 sec)

我們在外面把@count賦值為1,儲存過程裡面獲取到了值,然後賦值為2,儲存過程結束後,打印出來的值依舊是2