从头开始学MySQL-------存储过程与存储函数(2)

10.1.6  流程控制的使用

        (1)IF语句的使用。

DROP PROCEDURE IF EXISTS testIf;
DELIMITER //
CREATE PROCEDURE testIf(OUT result VARCHAR(255))
BEGIN
     DECLARE val VARCHAR(255);
     SET val = 'a';
     IF val IS NULL
        THEN SET result = 'IS NULL';
        ELSE SET result = 'IS NOT NULL';
     END IF;
END //
DELIMITER ;

CALL testIf(@result);
SELECT @result;

  

        (2)CASE语句

DROP PROCEDURE IF EXISTS testCase;
DELIMITER //
CREATE PROCEDURE testCase(OUT result VARCHAR(255))
BEGIN
     DECLARE val VARCHAR(255);
     SET val = 'a';
     CASE val IS NULL
         WHEN 1 THEN SET result = 'val is true';
         WHEN 0 THEN SET result = 'val is false';
         ELSE SELECT 'else';
     END CASE;
END //
DELIMITER ;

CALL testCase(@result);
SELECT @result;

  

        (3)LOOP

        LOOP用于重复执行SQL。LEAVE 用于退出循环。

DROP PROCEDURE IF EXISTS testLoop;
DELIMITER //
CREATE PROCEDURE testLoop(OUT result VARCHAR(255))
BEGIN
     DECLARE id INT DEFAULT 0;
     add_loop:LOOP
	   SET id = id + 1;
	   IF id>10 THEN LEAVE add_loop; -- 可在此处修改成批量插入
	   END IF;
     SET result = id;
     END LOOP add_loop;
END //
DELIMITER ;

CALL testLoop(@result);
SELECT @result;

   

        下面是一个批量插入的例子

DROP TABLE IF EXISTS t_student;
 
CREATE TABLE t_student
(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  age  INT(11) NOT NULL
);

DROP PROCEDURE IF EXISTS testLoop;
DELIMITER //
CREATE PROCEDURE testLoop(IN columnCount INT(11))
BEGIN
     DECLARE id INT DEFAULT 0;
     add_loop:LOOP
	SET id = id + 1;
	IF id>columnCount THEN LEAVE add_loop;
	END IF;
       INSERT INTO t_student(id,name,age) VALUES(id,'dayu',22);
     END LOOP add_loop;
END //
DELIMITER ;

CALL testLoop(15);

 从头开始学MySQL-------存储过程与存储函数(2)_第1张图片

        (4)WHILE

DROP PROCEDURE IF EXISTS testWhile;
DELIMITER //

CREATE PROCEDURE testWhile(IN myCount INT(11),OUT result INT(11))
BEGIN
   DECLARE i INT DEFAULT 0 ; -- 定义变量
   WHILE i < myCount DO  -- 符合条件就循环
       -- 核心循环SQL;  
       SET i = i + 1 ; -- 计数器+1
   END WHILE;       -- 当不满足条件,结束循环  --分号一定要加!
   SET result = i;  -- 将变量赋值到输出
END //
CALL testWhile(10,@result);
SELECT @result AS 循环次数;

 

  

阅读更多

         从头开始学MySQL-------存储过程与存储函数(1)

         从头开始学MySQL-------存储过程与存储函数(2)

         从头开始学MySQL-------存储过程与存储函数(3)

         从头开始学MySQL-------存储过程与存储函数(4)​​​​​​​

         目录贴:从头开始学MySQL-------目录帖

 

你可能感兴趣的:(#,从头开始学MySQL)