mysql8学习笔记19--流程控制语句

• MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的流程控制语句,另外return语句也是函数中的特定流程控制语句
 
流程控制case语句
• Case语句在存储过程或函数中表明了复杂的条件选择语句

 • 第一个语句中case_value与后面各句的when_value依次做相等的对比,如果碰到相等的,则执行对应的后面的statement_list,否则接着对比,

如果都没有匹配,则执行else后面的statement_list
• 第二个语句中当search_condition满足true/1的结果时,则执行对应的statement_list,否则执行else对应的statement_list
• Statement_list可以包含一个或多个SQL语句
 
SELECT
    *, (
        CASE stusex
        WHEN 0 THEN
            'boy'
        WHEN 1 THEN
            'girl'
        ELSE
            'bu nan bu nv'
        END
    ) '性别'
FROM
    tb_student;

也能写成这个例子

SELECT
    *, (
        CASE 
        WHEN stusex=0 THEN
            'boy'
        WHEN stusex=1 THEN
            'girl'
        ELSE
            'bu nan bu nv'
        END 
    ) '性别'
FROM
    tb_student;

在存储过程中使用

drop PROCEDURE if EXISTS student2 ;
delimiter //
create PROCEDURE student2 (OUT ret VARCHAR(15),IN stuid_num int)
BEGIN
    DECLARE V int;
    set V=stuid_num;
    case 
    when v <= 1099 then update tb_student2 set `comment`='三年级学生'  where stuid=v;select '三年级学生' into ret;
    when  v > 1099 && v < 2099 then update tb_student2 set `comment`='二年级学生' where stuid=v;set @ret = '二年级学生';
    else update tb_student2 set `comment`='一年级学生' where stuid=v;select '一年级学生' into ret;
    end CASE;
END;
//
delimiter ;
call student2(@ret,1378);
select @ret;

 

 

流程控制IF语句
• IF语句在存储过程或函数中表明了基础的条件选择语句

• IF语句中如果search_condition满足true/1的条件,则执行对应的statement_list,否则再判断elseif中的search_condition是否满足true/1的条件,如果都不满足则执行else中的statement_list语句

• Statement_list中可以包含一个或多个SQL语句
 
DROP FUNCTION
IF EXISTS compare_20;
delimiter //


CREATE FUNCTION compare_20 (n INT, m INT) RETURNS VARCHAR (30)
BEGIN

DECLARE s VARCHAR (20) ;
IF n > m THEN

SET s = '>' ;
ELSEIF n = m THEN

SET s = '=' ;
ELSE

SET s = '<' ;
END
IF ;
SET s = concat(n, ' ', s, ' ', m) ; RETURN s ;
END//
delimiter ;
mysql> select compare_20(3,4);
+-----------------+
| compare_20(3,4) |
+-----------------+
| 3 < 4           |
+-----------------+
1 row in set, 2 warnings (0.01 sec)

mysql> 

 

流程控制iterate语句
• Iterate语句仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环

• Label表示自定义的标签名

 
流程控制leave语句
• Leave语句表明退出指定标签的流程控制语句块
• 通常会用在begin…end,以及loop,repeat,while的循环语句中

• Label表明要退出的标签名

 
流程控制loop语句
• Loop语句是存储过程或函数中表达循环执行的一种方式 

• 其中的statement_list可以包含一个或多个SQL语句

 

DELIMITER //
DROP PROCEDURE
IF EXISTS test ; CREATE PROCEDURE test ()
BEGIN

DECLARE i INT ;
SET i = 0 ; lp :  #lp为循环体名,可随意 loop为关键字
LOOP
    INSERT INTO test (sno, text, putsff)# 往test表添加数据
VALUES
    (i + 12, 'test', 20) ;
SET i = i + 1 ;# 循环一次,i加一
IF i > 10 THEN# 结束循环的条件: 当i大于10时跳出loop循环
    LEAVE lp ;
END
IF ;
END
LOOP
    ; SELECT
        *
    FROM
        test ;
    END
//
CALL test();
DELIMITER ;

 

流程控制repeat语句
• repeat语句是存储过程或函数中表达循环执行的一种方式
• Repeat语句中statement_list一直重复执行直到search_condition条件满足
• Statement_list可以包含一个或多个SQL语句
 
DROP FUNCTION
IF EXISTS fun_test;
delimiter //


CREATE FUNCTION fun_test (p INT) RETURNS INT
BEGIN
DECLARE x int;
SET x = 100 ;
REPEAT

SET p = p + 1 ; UNTIL p > x
END
REPEAT
    ; RETURN p ;
END//
delimiter ;
mysql> select fun_test(10);
+--------------+
| fun_test(10) |
+--------------+
|          101 |
+--------------+
1 row in set (0.00 sec)

mysql> 

 

流程控制while语句
• while语句是存储过程或函数中表达循环执行的一种方式
• 当search_condition返回为true时,则循环执行statement_list中的语句,直到search_condition的结果返回为false
• Statement_list中可以包含一个或多个SQL语句
 
DELIMITER //
 
DROP PROCEDURE if EXISTS test;# 如果存在test存储过程则删除
CREATE procedure test()#创建无参存储过程,名称为test
BEGIN
DECLARE i INT;  # 声明变量
SET i = 0;  # 变量赋值
WHILE i<5 DO # 结束循环的条件: 当i大于5时跳出while循环
INSERT INTO test VALUES(i+11,'test','20');# 往test表添加数据
SET i = i+1;    # 循环一次,i加1
END WHILE;  # 结束while循环
SELECT * FROM test; # 查看test表数据
END
//  # 结束定义语句
CALL test();    # 调用存储过程
DELIMITER ; # 重新将分隔符设置为;

 

流程控制return语句
• Return语句用在函数中,用来终结函数的执行并将指定值返回给调用者

• 在函数中必须要有至少一个return语句,当有多个return语句时则表明函数有多种退出的方式

 

 

 

posted @ 2021-05-03 11:14  爬行的龟  阅读(122)  评论(0编辑  收藏  举报
如有错误,欢迎指正 邮箱656521736@qq.com