IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]数据库中的控制语句

    wangshuxuncom发表于 2016-03-31 13:44:40
    love 0

            数据库中的控制语句分为分支语句和循环语句,接下来通过其在存储过程中的使用给大家逐一介绍:

            分支语句:

            1、if then、elseif、else、end if语句
            示例:
            创建存储过程:

    DELIMITER //  
    CREATE PROCEDURE proc (IN sex_type INT, OUT sex_name VARCHAR(4), IN role_type INT, OUT role_name VARCHAR(8))  
    NO SQL 
    BEGIN 
    IF (sex_type = 0) THEN SET sex_name = '女';
    ELSEIF (sex_type = 1) THEN SET sex_name = '男';
    ELSE SET sex_name = '其它';
    END IF;  
    IF (role_type = 0) THEN SET role_name = '管理员';
    ELSEIF (role_type = 1) THEN SET sex_name = '普通员工';
    ELSE SET role_name = '游客';
    END IF;  
    END //  
    DELIMITER ;
            说明:SET用来给变量赋值。

            注意:MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”
            调用存储过程:

    SET @sex_type=1,@role_type=2;  
    CALL proc(@sex_type, @sex_name, @role_type, @role_name); 
    SELECT @sex_name AS sex, @role_name AS role;

            除了可以使用SET给变量赋值外,还可以使用into为变量赋值:

            创建存储过程:

    DELIMITER //  
    CREATE PROCEDURE proc(OUT cur_date DATE)  
    NO SQL
    BEGIN 
    SELECT NOW() INTO cur_date;
    END//  
    DELIMITER ;
            调用存储过程:
    CALL proc(@cur_date);
    SELECT @cur_date;

            2、case语句: 

            示例:

            创建存储过程:
    DELIMITER //  
    CREATE PROCEDURE proc (IN sex_type INT, OUT sex_name VARCHAR(4), IN role_type INT, OUT role_name VARCHAR(8))  
    NO SQL 
    BEGIN 
    CASE sex_type  
    WHEN 0 THEN SET sex_name = '女';  
    WHEN 1 THEN SET sex_name = '男';  
    ELSE SET sex_name = '其它'; 
    END CASE;
    CASE role_type  
    WHEN 0 THEN SET role_name = '管理员'; 
    WHEN 1 THEN SET role_name = '普通员工';  
    ELSE SET role_name = '游客'; 
    END CASE;
    END //  
    DELIMITER ;
            调用存储过程:
    SET @sex_type=1,@role_type=2;  
    CALL proc(@sex_type, @sex_name, @role_type, @role_name); 
    SELECT @sex_name AS sex, @role_name AS role;

            循环语句:

            1、while……do……end while语句

            示例:
            创建存储过程:

    DELIMITER //  
    CREATE PROCEDURE proc (OUT result INT)  
    NO SQL 
    BEGIN 
    DECLARE i INT;  
    SET i=0;  
    WHILE i<6 DO SET i=i+1;
    END WHILE;
    SET result = i;
    END //  
    DELIMITER ;
            说明:DECLARE用来声明存储过程中的临时变量
            调用存储过程:
    CALL proc(@result); 
    SELECT @result AS result;
            2、repeat……until……end repeat语句

            该种循环类似于Java中的do while,即在执行操作后检查条件是否成立,而while则是执行前进行检查。

            示例:

            创建存储过程:
    DELIMITER //
    CREATE PROCEDURE proc (OUT result INT)
    NO SQL
    BEGIN
    DECLARE i INT;
    SET i=0;
    REPEAT SET i=i+1;
    UNTIL i!=0 END REPEAT;
    SET result = i;
    END //
    DELIMITER;
            调用存储过程:

    CALL proc(@result); 
    SELECT @result AS result;
            3、 loop……end loop语句

            示例:

            创建存储过程:
    DELIMITER //  
    CREATE PROCEDURE proc(OUT result INT)  
    NO SQL
    BEGIN 
    DECLARE i INT DEFAULT 0;  
    LOOP_LABLE:LOOP  
    SET i=i+1;  
    IF i >=2 THEN 
    LEAVE LOOP_LABLE;  
    END IF;  
    END LOOP; 
    SET result = i; 
    END;  
    //  
    DELIMITER ; 
            说明:DEFAULT用于给声明的临时变量赋默认值。
            调用存储过程:
    CALL proc(@result); 
    SELECT @result AS result;



沪ICP备19023445号-2号
友情链接