zoukankan      html  css  js  c++  java
  • 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语句时则表明函数有多种退出的方式

  • 相关阅读:
    汉斯·季默:布拉格现场
    天使在美国第二部:重建
    欢迎访问我的独立博客 tracefact.net (2019.1.30)
    Kafka 分布式消息系统
    Webpack入门
    《.NET之美》消息及勘误
    MacBook笔记本微信视频聊天没有声音怎么办?
    libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64
    List stream 对象 属性去重
    JS遍历对象的方式
  • 原文地址:https://www.cnblogs.com/laonicc/p/13463732.html
Copyright © 2011-2022 走看看