14.流程控制的使用(实例)
==存储过程和函数中可以使用流程控制来控制语句的执行。MySQL 中可以使用 IF 语句、CASE 语句、LOOP语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE 语句来进行流程控制==
14.1(IF语句)
DELIMITER &&//if语句
CREATE PROCEDURE pro_user5(IN bookId INT)
BEGIN
SELECT COUNT(*) INTO @num FROM t_user WHERE id=bookId;
IF @num>0 THEN UPDATE t_user SET userName='java12345' WHERE id=bookId;
ELSE
INSERT INTO t_user VALUES(NULL,'2312312','23221312');
END IF;
END
&&
DELIMITER ;
14.2(case语句)
DELIMITER &&//case语句(@+变量可当作全局常量来理解)
CREATE PROCEDURE pro_user6(IN bookId INT)
BEGIN
SELECT COUNT(*) INTO @num FROM t_user WHERE id=bookId;
CASE @num
WHEN 1 THEN UPDATE t_user SET userName='java12345' WHERE id=bookId;
WHEN 2 THEN INSERT INTO t_user VALUES(NULL,'2312312','23221312');
ELSE INSERT INTO t_user VALUES(NULL,'2312312123321','232213121231132');
END CASE;
END
&&
DELIMITER ;
14.3 (LOOP,LEAVE 语句)
==LOOP,LEAVE语句:LOOP 语句可以使某些特定的语句重复执行,实现一个简单的循环。但是 LOOP 语句本身没有停止循环的语句,必须是遇到 LEAVE 语句等才能停止循环。==
DELIMITER &&
CREATE PROCEDURE pro_user7(IN totalNum INT)
BEGIN
aaa:LOOP
SET totalNum=totalNum-1;
IF totalNum=0 THEN LEAVE aaa;
ELSE INSERT INTO t_user VALUES(totalNum,'2312312','23221312');
END IF ;
END LOOP aaa;
END
&&
DELIMITER ;
14.4(ITERATE 语句)
ITERATE 语句:ITERATE 语句也是用来跳出循环的语句。但是,ITERATE 语句是跳出本次循环,然后直接进入下一次循环。
DELIMITER &&(ITERATE 语句:ITERATE 语句也是用来跳出循环的语句。但是,ITERATE 语句是跳出本次循环,然后直接进入下一次循环。)
CREATE PROCEDURE pro_user8(IN totalNum INT)
BEGIN
aaa:LOOP
SET totalNum=totalNum-1;
IF totalNum=0 THEN LEAVE aaa;
ELSEIF totalNum=3 THEN ITERATE aaa;
END IF ;
INSERT INTO t_user VALUES(totalNum,'2312312','23221312');
END LOOP aaa;
END
&&
DELIMITER ;
14.5(REPEAT 语句)
REPEAT 语句:REPEAT 语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。
DELIMITER &&
CREATE PROCEDURE pro_user9(IN totalNum INT)
BEGIN
REPEAT
SET totalNum=totalNum-1;
INSERT INTO t_user VALUES(totalNum,'2312312','23221312');
UNTIL totalNum=1
END REPEAT ;
END
&&
DELIMITER ;
14.6(WHILE 语句)
DELIMITER &&//WHILE 语句
CREATE PROCEDURE pro_user10(IN totalNum INT)
BEGIN
WHILE totalNum>0 DO
INSERT INTO t_user VALUES(totalNum,'2312312','23221312');
SET totalNum=totalNum-1;
END WHILE;
END
&&
DELIMITER ;
14.6 查看存储过程和函数(还可以在系统表中查看)
SHOW PROCEDURE STATUS LIKE 'pro_book';//查看存储过程和函数的状态
SHOW CREATE PROCEDURE pro_book;//语句查看存储过程的函数的定义
14.7 修改存储过程和函数
ALTER PROCEDURE pro_book COMMENT '我来测试一下comment';//修改存储过程和函数
14.8 删除存储过程和函数
DROP PROCEDURE pro_user10;//删除存储过程和函数