-- 1 无参数//编写存储过程addresult1, 输出1+2+3+...+10的结果;delimiter $$
createprocedure addresult1()begindeclare i int;declare sum int;declare n int;set i =1;set sum =0;set n =10;while i <= n DOset sum = sum + i;set i = i +1;endwhile;select sum ;end
$$
delimiter;//用delimiter将语句分隔符定义为分号;注意delimiter之后需要加上一个空格;call addresult1();-- 2 有参数//修改上面的存储过程addresult2, 使得n为输入参数, 其具体值由用户调用此存储过程指定delimiter $$
createprocedure addresult2(in n int)begindeclare i int;declare sum int;set i =1;set sum =0;while i <= n DOset sum = sum + i;set i = i +1;endwhile;select sum ;end
$$
delimiter;call addresult2(100);-- 3有输入参数和输出参数-- 用户变量需要以@开头, 用set@变量 = value赋值, 用select@变量显示值delimiter $$
createprocedure addresult3(in n int, in m int,out sum int)beginset sum =0;while(n <= m)doset sum = sum + n;set n = n +1;endwhile;end
$$
delimiter;//调用存储过程, 计算10到20的所有的和, 结果165set@sum=0;call addresult3(10,20,@sum);select@sum;//4,将n设置成为inout类型delimiter $$
createprocedure addresult4(inout n int)begindeclare i , sum int;set i =1;set sum =0;while i <= n doset sum = sum + i;set i = i +1;endwhile;set n = sum ;end
$$
delimiter;set@n=15;call addresult14(@n);-- 这个单独运行才会有结果select@n;//结果是120,n 可以传递过去, 也可以传递出来//eg-- 创建一个存储过程, sp_student_info, 用于输入学号的学生基本信息delimiter $$
createprocedure sp_student_info(in s_sno char(9))beginselect sno , sname, ssex , sage
from student
where sno = s_sno;end
$$
delimiter;-- 删除存储过程语句-- drop procedure sp_student_info;call sp_student_info("091001");-- 查看存储过程-- show procedure status\G;//把结果旋转90度-- show procedure status\g;-- show procedure status like "sp%"\G ;//获取数据库中所有的名称, 以sp开头的存储过程的信息-- 上面只能用于命令行,在navicat都不可运行showcreateprocedure sp_student_info\G;-- 查看源代码showprocedurestatuslike"sp%";showcreateprocedure sp_student_info;
数据库的存储过程:存储过程是方法,有类似的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名,有存储过程参数,也有返回值。-- 1 无参数delimiter $$create procedure addresult1()begin declare i int; declare sum int; declare n int; set i = 1; set sum = 0; set n = 10; while i <= n DO se