in 为向函数传送进去的值
out 为函数向外返回的值
intout 传送进去的值, 并且还返回这个值
create procedure q1(in number int,out name varchar(100)) begin if number > 1 then select 'true'; else select 'false'; end if; end$
调用时:
call q1(1, @value);
注意, 第二个参数要为变量定义的型式。
这个函数并没有向外发送改变后的name值, 所以调用后 select @value 为null。
再看看out:
mysql> create procedure qq(number int,inout name varchar(100)) -> begin -> if number > 1 then -> select 'true'; -> else -> select 'false'; -> end if; -> set name=user(); -> end$Query OK, 0 rows affected (0.00 sec)mysql> call qq(1,@as)$+-------+| false |+-------+| false |+-------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)mysql> select @as$+----------------+| @as |+----------------+| root@localhost |+----------------+1 row in set (0.00 sec)mysql>
inout例子:
mysql> create procedure qqq(inout name varchar(100)) -> begin -> set name=database(); -> end$Query OK, 0 rows affected (0.00 sec)mysql> call qqq(1)$ERROR 1414 (42000): OUT or INOUT argument 1 for routine test.qqq is not a variable or NEW pseudo-variable in BEFORE triggermysql> call qqq(@abc)$Query OK, 0 rows affected (0.00 sec)mysql> select @abc$+------+| @abc |+------+| test |+------+1 row in set (0.00 sec)mysql>
注意参数型式, 因为他要发送回来, 这个inout的参数型式要跟out类似, 也就是要变量定义型式: @变量名。