前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含:
-- 根据定义的分数score变量,判定当前分数对应的分数等级
-- score >= 85分,等级为优秀。
-- score >=60分 且score<85分,等级为及格。
-- score <60分,等级为不及格。
create procedure p3()
begin
declare score int default 58;
declare result varchar(10);
if score >= 85 then
set result :='优秀';
else if score >= 60 then
set result :='及格';
else
set result :='不及格'
end if;
end;
call p3();
-- 根据传入(in)参数score,判定当前分数对应的分数等级,并返回(out)
-- score >= 85分,等级为优秀。
-- score >=60分 且score<85分,等级为及格。
-- score <60分,等级为不及格。
create procedure p4(in score int, out result varchar(10))
begin
if score >= 85 then
set result :='优秀';
elseif score >= 60 then
set result :='及格';
else
set result :='不及格';
end if;
end;
--调用
call p4( score: 18, result: @result);
select @result;
-- 将传入的 200分制的分数,进行换算,换算成百分制,然后返回分数--->inout
create procedure p5(inout score double)
begin
set score := score *0.5;
end;
set @score = 78;
call p5( score: @score);
select @score;
create procedure p6(in month int)
begin
declare result varchar(10);
case
when month >=1 and month <= 3 then
set result :='第一季度';
when month >=4 and month <= ó then
set result :='第二季度';
when month >=7and month <= 9 then
set result :='第三季度";
when month>=10 and month <= 12 then
set result :='第四季度";
else
set result :='非法参数";
end case ;
select concat('您输入的月份为:',month,',所属的季度为:',result);
end;
call p6(month:4)
-- A.定义局部变量,记录累加之后的值;
-- B.每循环一次,就会对进行减1,如果n减到日,则退出循环
create procedure p7(in n int)
begin
declare total int default 0;
while n>o do
set total := total + n;
set n:= n-1;
end while;
select total;
end;
call p7(n: 100);
-- A.定义局部变量,记录累加之后的值;
-- B.每循环一次,就会对n进行-1,如果n减到,则退出循环
create procedure p8(in n int)
begin
declare total int default 0;
repeat
set total := total + n;
set n:= n-1;
until n<= 0
end repeat;
select total;
end;
call p8(n: 100);
-- A.定义局部变量,记录累加之后的值;
-- B.每循环一次, 就会对进行-1 , 如果n减到, 则退出循环---->leave xx
create procedure p9(in n int)
begin
declare total int default 0;
sum:loop
if n<=0 then
leave sum;
end if;
set total := total + n;
set n:=n-1;
end loop sum;
select total;
end;
call p9(n: 100);
-- A.定义局部变量, 记录累加之后的值;
-- B.每循环一次,就会对进行-1, 如果n减到, 则退出循环----> leave xx
-- c.如果当次累加的数据是奇数, 则直接进入下一次循环.----> iterate xx
create procedure p10(in n int)
begin
declare total int default 0;
sum:Loop
if n<=0 then
Leave sum;
end if;
if n%2 = 1 then
set n:=n-1;
iterate sum;
end if;
set total := total + n;
set n:= n-1;
if n%2 = 1 then
set n:=n-1;
iterate sum;
end if;
set total := total + n;
set n:=n-1;
end loop sum;
select total;
end;
call p10( n: 10);
-- 游标
-- 根据传入的参数uage:来查询用户表 tb_user中,所有的用户年龄小于等于uage的用户姓名(name)和专业(profession)
-- 并将用户的姓名和专业插入到所创建的一张新表(id,name,profession)中。
-- 逻辑:
-- A.声明游标,存查询结果集
-- B.准备:创建表结构
-- C.开启游标
-- D.获取游标中的记录
-- E.插入数据到新表中
-- F.关闭游标
-- 注意事项:局部变量声明要在游标前
create procedure p11(in uage int)
begin
declare upame varchar(100)
declare upro varchar(100);
declare u_cursor cursor for select name,profession from tb_user where age <= uage;
drop table if exists tb_user_pro;
create table if not exists tb_user_pro(
id int primary key auto_increment,
name varchar(100),
profession varchar(100)
);
open u_cursor;
while true do
fetch u_cursor into uname,upro;
insert into tb_user_pro values(null, uname, upro);
end while;
close u_cursor;
end;
我们将其写入存储过程中,没有报错,问题解决