文章目录
流程控制结构一、分支结构1.if函数2.case结构3.if结构
二、循环结构1.while2.loop3.repeat
流程控制结构经典案例讲解
流程控制结构
一、分支结构
1.if函数
2.case结构
3.if结构
案例:
CREATE FUNCTION test_if
(score
FLOAT) RETURNS CHAR
BEGIN
DECLARE ch
CHAR DEFAULT 'A';
IF score
>90 THEN SET ch
='A';
ELSEIF score
>80 THEN SET ch
='B';
ELSEIF score
>60 THEN SET ch
='C';
ELSE SET ch
='D';
END IF;
RETURN ch
;
END $
SELECT test_if
(87)$
CREATE PROCEDURE test_if_pro
(IN sal
DOUBLE)
BEGIN
IF sal
<2000 THEN DELETE FROM employees
WHERE employees
.salary
=sal
;
ELSEIF sal
>=2000 AND sal
<5000 THEN UPDATE employees
SET salary
=salary
+1000 WHERE employees
.`salary
`=sal
;
ELSE UPDATE employees
SET salary
=salary
+500 WHERE employees
.`salary
`=sal
;
END IF;
END $
CALL test_if_pro
(2100)$
CREATE FUNCTION test_case
(score
FLOAT) RETURNS CHAR
BEGIN
DECLARE ch
CHAR DEFAULT 'A';
CASE
WHEN score
>90 THEN SET ch
='A';
WHEN score
>80 THEN SET ch
='B';
WHEN score
>60 THEN SET ch
='C';
ELSE SET ch
='D';
END CASE;
RETURN ch
;
END $
SELECT test_case
(56)$
二、循环结构
1.while
2.loop
3.repeat
DROP PROCEDURE pro_while1$
CREATE PROCEDURE pro_while1
(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_while1
(100)$
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$
CREATE PROCEDURE test_while1
(IN insertCount
INT)
BEGIN
DECLARE i
INT DEFAULT 1;
a:
WHILE i
<=insertCount
DO
INSERT INTO admin
(username
,`password
`) VALUES(CONCAT
('xiaohua',i
),'0000');
IF i
>=20 THEN LEAVE a
;
END IF;
SET i
=i
+1;
END WHILE a
;
END $
CALL test_while1
(100)$
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$
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)!=0 THEN ITERATE a
;
END IF;
INSERT INTO admin
(username
,`password
`) VALUES(CONCAT
('xiaohua',i
),'0000');
END WHILE a
;
END $
CALL test_while1
(100)$
流程控制结构经典案例讲解
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 1;
DECLARE str
VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE startIndex
INT;
DECLARE len
INT;
WHILE i
<=insertcount
DO
SET startIndex
=FLOOR
(RAND
()*26+1);
SET len
=FLOOR
(RAND
()*(20-startIndex
+1)+1);
INSERT INTO stringcontent
(content
) VALUES(SUBSTR
(str
,startIndex
,len
));
SET i
=i
+1;
END WHILE;
END $
CALL test_randstr_insert
(10)$
转载请注明原文地址: https://lol.8miu.com/read-5253.html