mysql儲存過程引數型別
阿新 • • 發佈:2019-02-18
儲存過程可以理解成程式中封裝的程式碼塊,並且可以相互呼叫
由於下面的例子會使用變數,那麼先了解一下變數。
變數分為使用者變數和系統變數
使用者變數變數名以@開頭
建立使用者變數
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)
OUT輸出引數,值可在內部修改和返回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)
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)