当前位置:   article > 正文

MySQL---存储过程流程控制(判断(if、case)、循环(while、repeat、loop))_存储过程if多个判断条件

存储过程if多个判断条件

1. if判断

IF语句包含多个条件判断,根据结果为TRUEFALSE执行语句,与编程语言中的ifelse ifelse

语法类似,其语法格式如下:

  1. -- 语法
  2. if search_condition_1 then statement_list_1
  3. [elseif search_condition_2 then statement_list_2] ...
  4. [else statement_list_n]
  5. end if
  1. -- 输入学生的成绩,来判断成绩的级别:
  2. /*
  3. score < 60 :不及格
  4. score >= 60 , score <80 :及格
  5. score >= 80 , score < 90 :良好
  6. score >= 90 , score <= 100 :优秀
  7. score > 100 :成绩错误
  8. */
  9. delimiter $$
  10. create procedure proc_12_if(in score int)
  11. begin
  12. if score < 60
  13. then
  14. select '不及格';
  15. elseif score < 80
  16. then
  17. select '及格' ;
  18. elseif score >= 80 and score < 90
  19. then
  20. select '良好';
  21. elseif score >= 90 and score <= 100
  22. then
  23. select '优秀';
  24. else
  25. select '成绩错误';
  26. end if;
  27. end $$
  28. delimiter ;
  29. call proc_12_if(120)
  1. -- 输入员工的名字,判断工资的情况。
  2. delimiter $$
  3. create procedure proc12_if(in in_ename varchar(50))
  4. begin
  5. declare result varchar(20);
  6. declare var_sal decimal(7,2);
  7. select sal into var_sal from emp where ename = in_ename;
  8. if var_sal < 10000
  9. then set result = '试用薪资';
  10. elseif var_sal < 30000
  11. then set result = '转正薪资';
  12. else
  13. set result = '元老薪资';
  14. end if;
  15. select result;
  16. end$$
  17. delimiter ;
  18. call proc12_if('庞统');

2. case判断

CASE是另一个条件判断的语句,类似于编程语言中的switch语法

  1. -- 语法一(类比java的switch):
  2. case case_value
  3. when when_value then statement_list
  4. [when when_value then statement_list] ...
  5. [else statement_list]
  6. end case
  7. -- 语法二:
  8. case
  9. when search_condition then statement_list
  10. [when search_condition then statement_list] ...
  11. [else statement_list]
  12. end case
  1. -- 语法一
  2. delimiter $$
  3. create procedure proc14_case(in pay_type int)
  4. begin
  5. case pay_type
  6. when 1
  7. then
  8. select '微信支付' ;
  9. when 2 then select '支付宝支付' ;
  10. when 3 then select '银行卡支付';
  11. else select '其他方式支付';
  12. end case ;
  13. end $$
  14. delimiter ;
  15.  
  16. call proc14_case(2);
  17. call proc14_case(4);
  1. -- 语法二
  2. delimiter $$
  3. create procedure proc_15_case(in score int)
  4. begin
  5. case
  6. when score < 60
  7. then
  8. select '不及格';
  9. when score < 80
  10. then
  11. select '及格' ;
  12. when score >= 80 and score < 90
  13. then
  14. select '良好';
  15. when score >= 90 and score <= 100
  16. then
  17. select '优秀';
  18. else
  19. select '成绩错误';
  20. end case;
  21. end $$
  22. delimiter ;
  23.  
  24. call proc_15_case(88);

3. while循环

循环是一段在程序中只出现一次,但可能会连续运行多次的代码。

循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环

  1. -- 语法:
  2. 【标签:】while 循环条件 do
  3. 循环体;
  4. end while【 标签】;
  1. -- 创建测试表
  2. create table user (
  3. uid int primary_key,
  4. username varchar ( 50 ),
  5. password varchar ( 50 )
  6. );
  7. -- -------存储过程-while
  8. delimiter $$
  9. create procedure proc16_while1(in insertcount int)
  10. begin
  11. declare i int default 1;
  12. label:while i<=insertcount do
  13. insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
  14. set i=i+1;
  15. end while label;
  16. end $$
  17. delimiter ;
  18.  
  19. call proc16_while(10);

循环控制:

leave 类似于 break,跳出,结束当前所在的循环

iterate类似于 continue,继续,结束本次循环,继续下一次

  1. -- -------存储过程-while + leave
  2. truncate table user;
  3. delimiter $$
  4. create procedure proc16_while2(in insertcount int)
  5. begin
  6. declare i int default 1;
  7. label:while i<=insertcount do
  8. insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
  9. if i=5 then leave label;
  10. end if;
  11. set i=i+1;
  12. end while label;
  13. end $$
  14. delimiter ;
  15.  
  16. call proc16_while2(10);
  1. -- -------存储过程-while+iterate
  2. truncate table user;
  3. delimiter $$
  4. create procedure proc16_while3(in insertcount int)
  5. begin
  6. declare i int default 1;
  7. label:while i<=insertcount do
  8. set i=i+1;
  9. if i=5 then iterate label;
  10. end if;
  11. insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
  12. end while label;
  13. end $$
  14. delimiter ;
  15. call proc16_while3(10);

4. repeat循环

  1. [标签:]repeat
  2. 循环体;
  3. until 条件表达式
  4. end repeat [标签];
  1. -- -------存储过程-循环控制-repeat
  2. use mysql7_procedure;
  3. truncate table user;
  4.  
  5.  
  6. delimiter $$
  7. create procedure proc18_repeat(in insertCount int)
  8. begin
  9. declare i int default 1;
  10. label:repeat
  11. insert into user(uid, username, password) values(i,concat('user-',i),'123456');
  12. set i = i + 1;
  13. until i > insertCount
  14. end repeat label;
  15. select '循环结束';
  16. end $$
  17. delimiter ;
  18.  
  19. call proc18_repeat(100);

5. loop循环

  1. [标签:] loop
  2. 循环体;
  3. if 条件表达式 then
  4. leave [标签];
  5. end if;
  6. end loop;
  1. -- -------存储过程-循环控制-loop
  2. truncate table user;
  3.  
  4. delimiter $$
  5. create procedure proc19_loop(in insertCount int)
  6. begin
  7. declare i int default 1;
  8. label:loop
  9. insert into user(uid, username, password) values(i,concat('user-',i),'123456');
  10. set i = i + 1;
  11. if i > 5
  12. then
  13. leave label;
  14. end if;
  15. end loop label;
  16. select '循环结束';
  17. end $$
  18. delimiter ;
  19.  
  20. call proc19_loop(10);

(日常美图时间)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/873560
推荐阅读
相关标签
  

闽ICP备14008679号