1、in参数的理解
DELIMITER
C
R
E
A
T
E
P
R
O
C
E
D
U
R
E
s
e
l
e
c
t
U
s
e
r
1
(
I
N
u
s
e
r
i
d
I
N
T
)
B
E
G
I
N
S
E
L
E
C
T
∗
f
r
o
m
t
u
s
e
r
W
H
E
R
E
i
d
>
u
s
e
r
i
d
;
E
N
D
CREATE PROCEDURE selectUser1(IN userid INT) BEGIN SELECT * from t_user WHERE id > userid; END
CREATEPROCEDUREselectUser1(INuseridINT)BEGINSELECT∗fromtuserWHEREid>userid;END
DELIMITER ;
SET @userid = 3;
CALL atcrowdfunding.addUser(@userid); --内部不能改变userid的值,只是可以传入作为参数使用
SELECT @userid; --所以此处输出还是3
2、out参数的理解
DELIMITER
C
R
E
A
T
E
P
R
O
C
E
D
U
R
E
S
E
L
E
C
T
U
S
E
R
(
O
U
T
u
s
e
r
s
i
n
t
)
B
E
G
I
N
−
−
S
E
T
u
s
e
r
s
=
1
;
S
E
L
E
C
T
u
s
e
r
s
;
S
E
L
E
C
T
c
o
u
n
t
(
∗
)
i
n
t
o
u
s
e
r
s
f
r
o
m
t
u
s
e
r
;
S
E
L
E
C
T
u
s
e
r
s
;
e
n
d
CREATE PROCEDURE SELECT_USER(OUT users int) BEGIN -- SET users = 1; SELECT users; SELECT count(*) into users from t_user; SELECT users; end
CREATEPROCEDURESELECTUSER(OUTusersint)BEGIN−−SETusers=1;SELECTusers;SELECTcount(∗)intousersfromtuser;SELECTusers;end
DELIMITER ;
set @users = 3;
CALL atcrowdfunding.SELECT_USER(@users);–此处第一个结果将输出null,user是作为输出参数,执行了SELECT count(*) into users from t_user;才会有值
SELECT @users; --users将会被改变
ps:set @users = 3 为用户变量的定义,注意不要定义过多的用户变量!