创建存储过程
create procedure 存储名(in 传入参数 int,in b int,out 输出参数 int)
begin -- 开始
set sum = a+b; -- 执行操作
end; -- 结束
-- 调用
call mypro(传入参数1,传入参数2,输出参数(@参数名));
select @参数名;
练习- -计算两个数值
-- 计算两个数的和
create procedure mypro(in a int,in b int,out sum int)
begin
set sum = a+b;
end;
-- 计算三个数的乘积
create procedure mypros(in a int,in b int,in c int,out sumq int)
begin
set sumq = a*b*c;
end;
-- 调用
call mypros(1,2,3,@ss);
select @ss;
==3
-- 赋值查询
create procedure mypro1()
BEGIN
DECLARE name VARCHAR(20);
set name='张三';
select * from studentinfo WHERE studentinfo.stuName=name;
END;
call mypro1();
== 6
CREATE PROCEDURE mypro2(in a int)-- 输入参数
BEGIN
if a<0 THEN-- 判断小于0
select '负数';--打印‘负数’
ELSEIF a=0 THEN--等于0
SELECT '不是正数也不是负数';-- 打印‘不是正数也不是负数’
ELSE -- 否则
SELECT '正数'; -- 打印‘正数’
END IF;-- 结束判断
END;
CALL mypro2(0)--调用
-- 两个数比大小输出最大的
CREATE PROCEDURE mypro3(in a int,in b int,out c int)
BEGIN
IF a>b THEN
set c=a;
ELSEIF a=b THEN
set c=a;
ELSE
set c=b;
end IF;
END;
CALL mypro3(2,2,@a);
SELECT @a;
-- 循环
CREATE PROCEDURE mypro4(out sum INT)-- 输出
BEGIN
DECLARE i int DEFAULT 0;-- 重点不可以直接赋值需要加上默认值
set sum=0;-- 定义控制接收
WHILE i<10 DO-- 条件
set i=i+1; -- 执行方法
set sum=sum+i; -- 结果
END WHILE;-- 循环结束
END;
CALL mypro4(@s);-- 调用
select @s-- 打印控制台
== 55
-- 计算100以内的
--结果5050
CREATE PROCEDURE mypro88011(out sum INT)
BEGIN
DECLARE i int DEFAULT 0;
set sum=0;
WHILE i<=100 DO
set sum=sum+i;
set i=i+1;
END WHILE;
END;
CALL mypro88011(@qq);
select @qq
-- 1-100之间被5整除之和
CREATE PROCEDURE mypro8801(out sum INT)
BEGIN
DECLARE i int DEFAULT 0;-- 重点不可以直接赋值需要加上默认值
set sum=0;
WHILE i<=100 DO
if (MOD(i,5))=0 THEN
set sum=sum+i;
end IF;
set i=i+1;
END WHILE;
END;
CALL mypro8801(@qq);
select @qq
== 1050
方法2
-- 1-100之间被5整除之和
CREATE PROCEDURE mypro8802(out sum INT)
BEGIN
DECLARE i int DEFAULT 0;-- 重点不可以直接赋值需要加上默认值
set sum=0;
WHILE i<=100 DO
if i%5=0 then
set sum=sum+i;
end IF;
set i=i+1;
END WHILE;
END;
CALL mypro8802(@qq);
select @qq
-- 创建过程
create procedure mypro8083(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro8083(@sum);
-- 查询变量值
select @sum;
-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;
存储过程的管理*(可以加密但不可解密)*
1、显示存储过程
SHOW PROCEDURE STATUS;
2、显示特定数据库的存储过程
SHOW PROCEDURE status where db = '特定名字';
3、显示存储过程源码
SHOW CREATE PROCEDURE 存储过程名(自己定义的)
4、删除存储过程@TOC
drop PROCEDURE 存储过程名名字