上一章我们学习了软件测试工程师是如何测试存储过程的(上)部分,今天我们一起来学习存储过程的(下)部分。有不懂的地方可以咨询在线老师,一对一在线解答。
一:条件语句
条件语句主要有if语句和和case语句两种:
1、if语句
If语句分为单条件语句和多条件语句:
单条件语句语法:
If( ) then #如果条件成立执行下边语句
……
……
Else #如果条件不成立执行下边语句
……
……
End if; #if语句结束
多条件语句基本语法:
If( ) then #如果满足这个条件执行下边语句
……
Else if ( ) then #如果满足这个条件执行下边语句
……
Else #如果以上条件都不满足执行下边语句
……
End if; #if语句结束
实例1:(调用存储过程传入参数值如果大于30,则把大于等于该该年龄的学生删除,否则输出等于该参数值的学生)
CREATE DEFINER=`root`@`localhost` PROCEDURE `test3`(in age int)
BEGIN
if (age >30) then
DELETE from student where sage>=age;
else
select * from student where sage=age;
end if;
END
运行结果:
入参为9结果如下:(执行了else部分)
实例2:
CREATE DEFINER = CURRENT_USER PROCEDURE `test4`(in iname VARCHAR(20))
BEGIN
DECLARE avgscore int DEFAULT 0;
select avg(score) into avgscore from student st ,sc where st.sno=sc.sno and sname=iname;
if (avgscore>80) then
update student set type="优秀" where sname=iname;
else if (avgscore>60)
then
update student set type="合格" where sname=iname;
else
update student set type="不合格" where sname=iname;
COMMIT;
end if;
select type from student where sname=iname;
end
运行结果
2、case语句
Case语句语法结构:
Case variable
When 0 then #当variable值等于0时执行这一条
……
……
When 1 then #当variable值等于1时执行这一条
……
……
When 2 then #当variable值等于2时执行这一条
……
……
Else #当variable值不等于以上任意一条时执行这一条
……
……
End case; #case语句结束
实例:(输入员工姓名,如果查出来性别为0,则在员工性别表种将该员工工号、姓名、性别male插入;如果查出来性别为1,则在员工性别表种将该员工工号、姓名、性别female插入。)
CREATE DEFINER=`root`@`localhost` PROCEDURE `test5`(in empname VARCHAR(20))
BEGIN
DECLARE ssex int DEFAULT 0;
select sex into ssex from emp where ename=empname;
case ssex
when 0 then
INSERT into emp_sex select empno,ename,'male' from emp where ename=empname;
when 1 then
INSERT into emp_sex select empno,ename,'female' from emp where ename=empname;
end case;
COMMIT;
select * from emp_sex where ename=empname;
END
运行结果:
二:循环语句
1、while循环语句
基本语法如下:
While (条件) do #先判断是否满足循环条件,如果满足执行下边循环体
……
……
End while;
实例:现在测试员正在做并发测试需要模拟一千个不用户同时登录系统的操作,但是系统里现在并没有这么多用户,一条一条的新增和插入显然是不合实际的。但使用存储过程这个问题就能轻易解决。存储过程如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_users`()
BEGIN
DECLARE num int;
DECLARE num1 int;
DECLARE emails VARCHAR(100) default '';
select user_name+1 into num from ecs_users where user_id=(select max(user_id) from ecs_users);
set num1=num+100;
WHILE num
SELECT CONCAT(num,"@qq.com") as em into emails;
INSERT INTO ecs_users ( email, user_name, `password`, alias, msn, qq, office_phone, home_phone, mobile_phone, credit_line )
VALUES( emails, num, 123456, 'zhangsan', 123456, 123456, 123456, 123456, 123456, 0.00 );
set num=num+1;
END WHILE;
END
运行结果:
2、repeat循环语句
基本语法:
Repeat #先执行下边循环体
……
……
Untill (条件) #然后判断是否满足条件,满足就结束循环,不满足再次执行上边循环体
End repeat;
注意:while是先判断是否满足条件,满足条件执行循环体,不满足条件结束循环体。而repeat是先执行循环体,然后判断是否满足条件,满足条件结束循环体,不满足条件再次重复执行循环体,两者恰恰相反。
实例:
我们把7.1的实例改为repeat格式如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_users`()
BEGIN
DECLARE num int;
DECLARE num1 int;
DECLARE emails VARCHAR(100) default '';
select user_name+1 into num from ecs_users where user_id=(select max(user_id) from ecs_users);
set num1=num+100;
Repeat
SELECT CONCAT(num,"@qq.com") as em into emails;
INSERT INTO ecs_users ( email, user_name, `password`, alias, msn, qq, office_phone, home_phone, mobile_phone, credit_line )
VALUES( emails, num, 123456, 'zhangsan', 123456, 123456, 123456, 123456, 123456, 0.00 );
set num=num+1;
untill num>=num1
END WHILE;
END
运行结果和7.1中类似。
软件工程师是如何测试存储过程的(下)部分就讲完了,下期精彩内容敬请期待,大家喜欢的话记得每天来这里和小编一起学习涨薪技能。(笔芯)