CASE 变量|表达式|字段 WHEN 要判断的值1 THEN 返回值1或语句1 WHEN 要判断的值2 THEN 返回值2或语句2 … ELSE 返回值n或语句n END CASE ;
CASE WHEN 要判断的条件1 THEN 返回值1或语句1 WHEN 要判断的条件2 THEN 返回值2或语句2 … ELSE 返回值n或语句n END CASE ;
特点
既可以作为表达式,嵌套在其他语句中使用,此时任何位置都可以使用 也可以作为独立的语句去使用,此时只能用于 BEGIN END 中如果 when 中的值满足或条件成立,则执行对应的 THEN 后的语句,并且结束 CASE 如果都不满足,则执行 ELSE 中的语句或值ELSE 可以省略,此时如果所有的 WHEN 都不满足,则返回 NULLIF 条件1 THEN 语句1 ; ELSEIF 条件2 THEN 语句2 ; … ELSE 语句n ; END IF ;
使用条件:只能放在 BEGIN END 中创建存储过程:根据传入的成绩来显示等级
CREATE PROCEDURE pro1 (IN score INT) BEGIN CASE WHEN score >= 90 THEN SELECT 'A' ; WHEN score >= 80 THEN SELECT 'B' ; WHEN score >= 60 THEN SELECT 'C' ; ELSE SELECT 'D' ; END CASE ; END $ CREATE FUNCTION fun_ko (score INT) RETURNS CHAR BEGIN DECLARE result CHAR ; IF score >= 90 THEN SELECT 'A' INTO result ; ELSEIF score >= 80 THEN SELECT 'B' INTO result ; ELSEIF score >= 60 THEN SELECT 'C' INTO result ; ELSE SELECT 'D' INTO result ; END IF ; RETURN result ; END $标签 : WHILE 循环条件 DO 循环体 ; END WHILE 标签;
loop(可模拟简单的死循环)标签 : LOOP 循环体 ; END LOOP 标签;
repeat标签 : REPEAT 循环体 ; UNTIL 结束循环的条件 END REPEAT 标签;
循环控制
iterate:作用类似于continueleave:作用类似于break批量插入,根据次数插入到表中多条记录
CREATE PROCEDURE pro_op (IN intimes INT) BEGIN insertBoys : WHILE intimes > 0 DO INSERT INTO boys (boyName, userCP) VALUES ('沈千枫', 120) ; SELECT intimes - 1 INTO intimes ; END WHILE insertBoys ; END $批量插入,根据次数插入到表中多条记录,如果次数大于20则停止
CREATE PROCEDURE pro_lk (IN intimes INT) BEGIN DECLARE i INT DEFAULT 1; insertBoys : WHILE i <= intimes DO INSERT INTO boys (boyName, userCP) VALUES ('蓝湛', 1200) ; IF i>=20 THEN LEAVE insertBoys ; END IF ; SELECT i + 1 INTO i ; END WHILE insertBoys ; END $批量插入,根据次数插入到表中多条记录,偶数的数值不插入
CREATE PROCEDURE pro_lk (IN intimes INT) BEGIN DECLARE i INT DEFAULT 0; insertBoys : WHILE i <= intimes DO SELECT i + 1 INTO i ; IF i%2=0 THEN ITERATE insertBoys ; END IF ; INSERT INTO boys (boyName, userCP) VALUES ('沈兰舟', 1200 + i) ; END WHILE insertBoys ; END $