MySQL 进阶之路(四)流程控制

case 结构
#创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩: 90-100, 显示A, 80-90, 显示B,60-80, 显示c,否则,显示D
CREATE PROCEDURE test_case(IN score INT)
BEGIN
CASE
WHEN score>=90 AND score<=100 THEN SELECT 'A' ;
WHEN score>=80 THEN SELECT 'B' ;
WHEN score>=60 THEN SELECT 'C';
ELSE SELECT 'D'
END CASE;
END $
CALL test_case(95) $

#创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩: 90-100, 显示A, 80-90, 显示B, 60-80, 显示c,否则,显示D
CREATE PROCEDURE test_ case(IN score INT)
白BEGIN
CASE
WHEN score>=90 AND score<=100 THEN SELECT 'A';
WHEN score>=80 THEN SELECT 'B';
WHEN score>=60 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END $
CATT test_case(95) $

二、循环结构
分类:
while、loop、 repeat
循环控制:
iterate类似于continue, 继续,结束本次循环,继续下一次
leave类似于break, 跳出,結束当前所在的循环
1.while
语法:
[标签:] while 循环条件
do
循环体;
end while [标签] ;
2.loop
语法:
[标签:] loop
循环体
end loop[标签];
可以用来模拟简单的死循环

  1. repeat
    语法:
    [标签:] repeat
    循环体;
    until 結束循环的条件
    end repeat [标签]
    #没有添加循环控制语句
    案例:批量插入,根据次数插入到admin表中多条记录

CREATE PROCEDURE Pro_whilel (IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<= insertCount DO
INSERT INTO admin (username, "password') VALUES (CONCAT ('Rose',i), '666');
SET i=i+1;
END WHILE ;
END $
CALL pro_whilel (100)$

#2.添加leave语句
t案例:批量插入,根据次数播入到admin表中多条记录,如果次数>20则停止
CREATE PROCEDURE test_whilel(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<= insertCount DO
INSERT INTO adnin (username, 'password') VALUES (CONCAT ('xiaohua',i), '0000') ;
IF i>=20 THEN LEAVE a;
END IFI
SET i=i+1;
END WHILE a;
END $
CALL test_while1(100)$

#3.添加iterate语句
#案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次

CREATE PROCEDURE test_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 0;
a:WHILE i<=insertcount DO
SET i=i+1;
IF MOD(i,2)1=0 THEN ITERATE a;
END IF;
INSERT INTO adnin (username, password) VALUES (CONCAT('xiaohua',i), *0000');
END WHILE a;
END $
CALL test while1 (100)$

一、 已知表stringcontent
其中字段:
id自增长
content varchar (20)
向该表插入指定个数的,随机的字符串

DROP TABLE IF EXISTS stringcontent ;
CREATE TABLE stringcontent (
id INT PRIMARY KEY AUTO INCREMENT,
content VARCHAR (20)
);

DELIMITER $
CREATE PROCEDURE test randstr insert(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 12定义一个循环变量i,表示插入次数
DECLARE str VARCHAR(26) DEFAULT 'abedefghijklmnopqrstuvwxyz' ;
DECLARE startIndex INT DEFAULT 1;#代表起始索引
DECLARE len INT DEFAULT 1;# 代表裁取的字符的长度
WHILE i<=insertCount DO
SET len=FLOOR (RAND() (20-startIndex+1)+1);产生一个随机的整数,代表截取长度,1- (26- startIndex+1)
SET startIndex= FLOOR(RAND()*26+1);产生一个随机的整数,代表起始素引1-26
INSERT INTO stringcontent (content) VALUES (SUBSTR (str , startIndex, len));
SET =i+1;申循环变量更新
END WHILE ;
END $

猜你喜欢

转载自blog.51cto.com/14509987/2434182