create procedure 存储过程名 (in | out | INPUT 参数名 参数类型,。。。)
【characteristics 。。。】
begin
存储过程体
end
存储过程的参数类型
IN 、OUT、INPUT 都可以在一个存储过程带多个
- 没有参数(无参数无返回)
- 仅仅带IN 类型(有参数无返回)
- 仅仅带out 类型(无参数有返回)
- 既带IN 又带OUT(有参数有返回)
- 带INPUT (有参数有返回) 跟SQL server 中 存储过程中的 output 一样
存储过程的参数说明
一、参数前面的符号意思
- IN:当前参数为输入参数,也就是表示入参;
存储过程中只是读取这个参数的值。如果没有定义参数种类,默认就是 IN,表示输入参数。 - OUT:当前参数为输出参数,也就是表示出参;
执行完成后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了 - INOUT:当前参数既可以为输入参数,也可以作为输出参数 同 SQL Server 中 存储过程的 output
二、存储过程中 参数的数据类型 可以是mysql 数据库中的任意类型
三、characteristics 表示创建存储过程时指定对存储过程的约束条件,其取值信息如下:
创建 存储过程
DELIMITER $ -- 自定义 分节符
create procedure pro_emps_select()
begin
select * from emps;
end $
delimiter;
存储过程调用
sql server
exec 存储过程 参数 --支持参数命名
mysql
call 存储过程(实参列表)
创建存储过程 不带参数
delimiter $
create procedure pro_student_select() -- 括号不能省略
begin
select * from student;
end $
delimiter ;
call pro_student_select()
创建存储过程 IN参数
delimiter $
create procedure pro_student_select(IN stu char(8)) -- 括号不能省略
begin
select * from student
where stu_num=stu;
end $
delimiter ;
set @stu='s002';
call pro_student_select(@stu)
创建存储过程 out参数
delimiter $
create procedure pro_student_select(out stu_name char(10)) -- 括号不能省略
begin
select student_name into stu_name -- 如果多个 输出参数, into xxx,xxxx 用逗号隔开就行了
from student
where stu_num='1002';
end $
delimiter ;
call pro_student_select(@stuname)
select @stuname;
创建存储过程 in、 out参数
delimiter $
create procedure pro_student_select(in stu_id char(6),out stu_name char(10)) -- 括号不能省略
begin
select student_name into stu_name from student
where stu_num=stu_id ;
end $
delimiter ;
set @stuid=1002;
call pro_student_select(@stuid,@name)
select @name;
创建存储过程 inout参数
delimiter $
create procedure pro_student_select(inout stu_name char(10)) -- 括号不能省略
begin
select student_class into stu_name from student
where stu_name =stu_name ;
end $
delimiter ;
set @stu_name =1002;
call pro_student_select(@stu_name )
select @stu_name ;