实现:
delimiter $ # 此时调用者在调用这个存储过程的时候必须传递身高的变量值 create procedure pro_name(in height int(11)) begin # 定义一个存储身高类型的变量 declare figure varchar(50) default ''; # 使用 if 语句判断身材类型 if height >= 180 then set figure = '身材高挑'; else if height < 180 and height >= 170 then ? set figure = '标准身材'; ? ?else set figure = '一般身材'; ? ?end if; ? ?# 输出结果 ? ?select concat(height + '身高的身材为:' + figure); end $ ? delimiter ;
调用:
# 调用该存储过程。需要传递其中的身高值 call pro_name(175); ?# 输出结果为:
2.3.2 out - 输出参数
需求:根据输入的身高,返回当前身高所处的身材类型
实现:
delimiter $? create procedure pro_output(in height int(11) , out figure varchar(100)) begin # 使用 if 语句判断身材类型 if height >= 180 then set figure = '身材高挑'; else if height < 180 and height >= 170 then ? set figure = '标准身材'; ? ?else set figure = '一般身材'; ? ?end if; end $ delimiter ;
调用:
# @标识符:在MySQL中代表的就是用户定义的一个变量,这里我们使用这个变量来接收这个存储过程的返回值 call pro_output(175 , @figure); ? # 查看存储过程返回的结果 select @figure;
@标识符的作用
- @figure :这种在变量名前面加上”@“符号,叫做用户会话变量,代表整个会话过程他都是有作用的,这个类似于全局变量一样。当前会话就是代表的,比如我们在命令提示窗口中给好多带有 @ 符号变量进行赋值,此时这些变量的值只作用于当前的会话,当我们把这个窗口关闭的时候,此时这些变量的值就会释放掉。
- @@global : 这种在变量名前加上 "@@" 符号,叫做系统变量。
2.4 case 结构
语法格式:
# 方式一 case case_value(判断的值) when when_value(比较的值) then statement_list(SQL语句) [when when_value(比较的值) then statement_list(SQL语句)]... [else statement_list(SQL语句)] end case; ? # 方式二 case when search_condition(查询条件) then statement_list(SQL语句) [when search_condition(查询条件) then statement_list(SQL语句)]... [else statement_list(SQL语句)] end case;
需求:给定一个月份,判断该月份所属的季度
实现:
delimiter $? create procedure pro_quarter(in mon int(11)) begin # 定义存储季度的变量 declare result varchar(10); case when mon >= 1 and mon <= 3 then set result = '第一季度'; when mon >= 4 and mon <= 6 then set result = '第一季度'; when mon >= 7 and mon <= 9 then set result = '第一季度'; else set result = '第四季度'; ? ? ? ?end case; # 输出结果 select result; end $ ? delimiter ;
2.5 while循环
有条件的循环控制语句,当满足条件的时候进入循环,不满足条件的时候退出循环。
语法结构:
# 只要查询条件一直成立就会一直指定do后面的SQL语句,当查询条件不成立的时候直接跳出while循环 while search_condition(查询条件) do statement_list(SQL语句) end while;
需求:计算从1加到n的值
实现:
delimiter $? create procedure pro_sum(in num int(11)) begin # 定义存储总数的变量 declare total int(255) default 0; # 定义存储循环次数的数量 declare number int(255) default 1; while number <= num do set total = total + number; set number = number + 1; end while; select total; end $ ? delimiter ;
2.6 repeat循环
有条件的循环控制语句,当不满足条件的时候进入循环,满足条件的时候跳出循环。他和while循环是反着的
语法结构:
repeat statement_list(SQL语句) until search_condition(查询添加) end repeat;
需求:计算从1加到n的值
实现:
delimiter $? create procedure pro_sum(in num int(11)) begin # 定义存储总数的变量 declare total int(255) default 0; repeat set total = total + number; set num = num - 1; # 注意:这个 unti 后的查询条件不要加分号,加分号会报错。 until num = 0 end repeat; select total; end $ ? delimiter ;
2.7 loop循环
loop实现简单的循环,退出循环的条件需要使用其他的语句定义,通常可以使用leave语句实现,具体语法如下:
语法格式:
[begin_label:] loop statement_list end loop [end_label]
如果不在statement_list中增加退出循环的语句,那么loop语句可以永安里实现简单的死循环。
2.8 leave语句
用来从标注的流程构造中退出,通常和 begin...end 或循环一起使用。下面是一个使用loop和leave的简单例子,退出循环:
需求:计算从1加到n的值 ---> 使用loop...leave的形式进行退出循环
实现:
delimiter $ create procedure pro_sum(in num int(11)) begin # 定义存储总数的变量 declare total int(255) default 0; c(该循环的别名):loop set total = total + num; set num = num - 1; # 借助leave组织退出条件 if num <= 0 then ? ? ? leave c; ? ? ? ?end if; end loop c; select total; end $ delimiter ;
到此这篇关于MySQL存储过程及语法详解的文章就介绍到这了,更多相关MySQL存储语法内容请搜索
更多SQL内容来自木庄网络博客