1. 程式人生 > >mysql儲存過程引數型別

mysql儲存過程引數型別

儲存過程可以理解成程式中封裝的程式碼塊,並且可以相互呼叫

由於下面的例子會使用變數,那麼先了解一下變數。

變數分為使用者變數系統變數

使用者變數變數名以@開頭

建立使用者變數

mysql> select 'hello' into @a;
Query OK, 1 row affected (0.00 sec)
mysql> set @b=123;
Query OK, 0 rows affected (0.00 sec)

具有IN、OUT、INOUT三種引數型別

IN輸入引數,該引數必須在呼叫儲存過程前指定,並且在過程中修改的值不可返回

mysql> create procedure pro_int(IN a int)
    -> begin
    -> select a;
    -> set a = 111;
    -> select a;
    -> end;
    -> $$
Query OK, 0 rows affected (0.00 sec)
mysql> call pro_int(@b);
    -> $$
+------+
| a    |
+------+
|  123 |
+------+
1 row in set (0.00 sec)

+------+
| a    |
+------+
|  111 |
+------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.02 sec)

mysql> select @b;
    -> $$
+------+
| @b   |
+------+
|  123 |
+------+
1 row in set (0.00 sec)
OUT輸出引數,值可在內部修改和返回
mysql> create procedure pro_out(OUT a int)
    -> begin
    -> select a;
    -> set a = 111;
    -> select a;
    -> end;
    -> $$
Query OK, 0 rows affected (0.00 sec)

mysql> call pro_out(@b);
    -> $$
+------+
| a    |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

+------+
| a    |
+------+
|  111 |
+------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> select @b $$
+------+
| @b   |
+------+
|  111 |
+------+
1 row in set (0.00 sec)

INOUT 呼叫時指定,可修改和返回

mysql> create procedure pro_inout(INOUT a int)
    -> begin
    -> select a;
    -> set a = 111;
    -> select a;
    -> end;
    -> $$
Query OK, 0 rows affected (0.00 sec)
mysql> set @b=222;
    -> $$
Query OK, 0 rows affected (0.00 sec)

mysql> call pro_inout(@b);
    -> $$
+------+
| a    |
+------+
|  222 |
+------+
1 row in set (0.00 sec)

+------+
| a    |
+------+
|  111 |
+------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.02 sec)
mysql> select @b $$
+------+
| @b   |
+------+
|  111 |
+------+
1 row in set (0.00 sec)