zoukankan      html  css  js  c++  java
  • MySQL存储过程---流程控制(分支)

    case

    语法

    方法1:等值判断
    case 变量|表达式|字段
    when 判断的值 then 结果或语句;
    when 判断的值 then 结果或语句;
    ...
    else 结果或语句
    end case;
    
    
    方法2:
    case
    when 条件1 then 语句;
    when 条件2 then 语句;
    else 语句
    end case;

    实例

    创建存储过程

    DELIMITER $$
    
    USE `world`$$
    
    DROP PROCEDURE IF EXISTS `p_case`$$
    
    CREATE DEFINER=`root`@`10.0.0.%` PROCEDURE `p_case`( IN salary INT)
    BEGIN
        DECLARE res VARCHAR(10);
        
        CASE 
        WHEN salary < 5000
        THEN SET res = 'too low';
        WHEN salary < 10000
        THEN SET res = 'low';
        WHEN salary < 25000
        THEN SET res = 'middle';
        ELSE
          SET res = 'high';
         END CASE;
        
        SELECT res;
        END$$
    
    DELIMITER ;

    调用

    if

    语法

    if 
    条件1 then 语句1;
    elseif 条件2 then 语句2;
    ...;
    else 语句n;
    end if;

    实例 1

    DELIMITER $$
    
    USE `world`$$
    
    DROP PROCEDURE IF EXISTS `p_if`$$
    
    CREATE DEFINER=`root`@`10.0.0.%` PROCEDURE `p_if`( IN age INT)
    BEGIN
        
        DECLARE ret VARCHAR(20);
        
        IF age < 10
          THEN
        SET ret = 'little';
        ELSEIF age BETWEEN 10 AND 20
          THEN
        SET ret = 'yonung';
        ELSE
        SET ret = 'other';
        END IF;
        SELECT ret;
        END$$
    
    DELIMITER ;

    调用

    实例 2

    判断用户名、密码是否正确

    CREATE TABLE t3 (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL,
    passwd VARCHAR(20) NOT NULL)
    ENGINE=INNODB CHARSET utf8;
    
    INSERT INTO t3 VALUES(1,'tom','tompass'),(2,'jerry','jerrypass');

    创建存储过程

    DELIMITER $$
    
    CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        PROCEDURE `world`.`verify`(IN u VARCHAR(20), IN p VARCHAR(20))
        /*LANGUAGE SQL
        | [NOT] DETERMINISTIC
        | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
        | SQL SECURITY { DEFINER | INVOKER }
        | COMMENT 'string'*/
        BEGIN
        DECLARE num INT DEFAULT 0;
        DECLARE res VARCHAR(20);
        
        SELECT COUNT(*) INTO num FROM t3 WHERE t3.username=u AND t3.passwd=p;
        CASE
        WHEN num >0
        THEN SET res = 'successful';
        ELSE
        SET res='faild';
        END CASE;
        SELECT res;
    
        END$$
    
    DELIMITER ;

    调用

  • 相关阅读:
    override与new的区别
    预处理指令关键字
    索引器
    可选参数与命名参数
    sealed关键字
    获取变量默认值
    is和as
    throw和throw ex的区别
    位操作
    unsafe关键字
  • 原文地址:https://www.cnblogs.com/zh-dream/p/13128624.html
Copyright © 2011-2022 走看看