MySQL5.7從入門到精通-------儲存過程與儲存函式(2)
阿新 • • 發佈:2018-12-19
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);
(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
SET i = i + 1 ;
END WHILE;
SET result = i;
END //
CALL testWhile(10,@result);
SELECT @result AS 迴圈次數;