1、创建存储过程的语法:
create procedure 存储过程名(参数1,参数2,...) begin 存储过程语句块; end;
存储过程有三种类型的参数:
in:默认输入参数;
out:输出参数;
inout:既是输入也是输出参数;
测试:实现一个输入学生号,得出学生选修课数目;
delimiter $$ create procedure get_choose_course_num_proc(in stu_no char(11), out stu_num int) begin select count(*) into stu_num from choose where student_no=stu_no; end; $$ delimiter ; #测试: set @stu_no='2023001'; set @stu_num = 0; call get_choose_course_num_proc(@stu_no,@stu_num); select @stu_num;
同样我们也可以直接用:
call get_choose_course_num_proc('2023003',@stu_num); select @stu_num;
当然我们也可以用一个 inout 参数 代替两个参数;
delimiter $$ create procedure get_choose_course_num2_proc(inout stu_d int) begin select count(*) into stu_d from choose where student_no = stu_d; end; $$ delimiter ;
测试:
set @stu_d = '2023001'; call get_choose_course_num2_proc(@stu_d); select @stu_d;
这里使用一个变量完成;这里传入进去的类型是char型,输出的是int型,因为char型也是可以用int表示;
2、查看储存过程定义:
1)查看所有的存储过程定义:
show procedure status\G
这里截取的一部分,可以看到详细的信息;
2)查看指定的存储过程定义:
show create procedure get_choose_course_num2_proc\G
mysql8.0版本之前还可以:
select name from mysql.proc where db='数据库名' and type = 'procedure';
3)删除存储过程:
drop procedure 存储过程名;
总结:函数和存储过程的区别:
1、函数必须有返回类型和返回值,存储过程可以使用out 或 inout 的参数作为返回值;
2、函数内部可以使用select into 语句为变量赋值,返回不能存在有返回结果集的语句,存储过程没有这个限制;
3、函数可以直接在SQL语句或 MySQL 命令中使用,存储过程一般单独调用;
4、函数中的函数体不能使用事务控制语句;
标签:存储,16,创建,stu,num,choose,proc,select From: https://www.cnblogs.com/xuan01/p/17449612.html