川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

软件工程师是如何测试存储过程的(上)

作者:川石学院 日期:2021-04-27 16:45:33 点击数:

  存储过程可以说是测试开发都绕不开的结,作为测试我们在验证某个列表查出来数据对不对时,我们在界面新增一条数据,删除一条数据时,以及修改某个信息时,都可能调用了数据库里边某个存储过程,今天我们一起来接起存储过程的详细面纱。

软件工程师是如何测试存储过程的(上)(图1)

  一: 存储过程定义

  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

  二: 存储过程的特点

  1、能够完成较复杂的判断和运算,同时执行速率更快:对于很简单的sql,存储过程没有什么优势。对于复杂的业务逻辑,因为在存储过程创建的时候,数据库已经对其进行了一次解析和优化。存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,所以执行速度会比普通sql快。

  2、 减少网络流量:存储过程直接就在数据库服务器上跑,所有的数据访问都在数据库服务器内部进行,不需要传输数据到其它服务器,所以会减少一定的网络传输。如果通过网络发送的SQL多行代码到你的SQL Server中,这会影响网络性能。

  3、安全:用户无需执行任何直接的语句可以执行存储过程。提高代码安全,防止 SQL注入。

  4、可维护性:的存储过程有些时候比程序更容易维护,这是因为可以实时更新DB端的存储过程。 有些bug,直接改存储过程里的业务逻辑,就搞定了。

  5、可扩展性:应用程序和数据库操作分开,独立进行,而不是相互在一起。方便以后的扩展和DBA维护优化。

  三:存储过程语法

  1、创建存储过程的简单语法

  a、create procedure procedure_name()

  b、begin #存储过程开始

  c、 #存储过程内容

  d、End #存储过程结束

  2、创建一个简单的存储过程

  a、create procedure testa()

  b、begin

  c、select * from ecs_users;

  d、end

  3、调用存储过程

  call testa();

  四:变量定义

  1、变量分类

  存储过程中的变量分为全局变量、局部变量、用户变量。全局变量是指变量在多个begin与end块中都起作用,要放在块之前声明;局部变量是指该变量只在存储过程的begin与end之间起作用,end后变量就失去作用;用户变量是在存储过程外边定义的变量。

  2、变量声明

  局部变量和全局变量声明语法:

  DECLARE variable_name datatype [DEFAULT value];

  DECLARE:声明关键字,一句declare只声明一个变量,变量必须先声明后使用

  variable_name:变量名

  datatype:数据类型,变量具有数据类型和长度,与mysql的SQL数据类型保持一致,因此甚至还能制定默认值、字符集和排序规则等;

  DEFAULT value:默认值,可以缺省

  用户变量声明语法:

  Set @variable_name1=0;

  Set @variable_name2=``;

  注意:用户变量前边要加@符号。

  3、变量赋值

  赋值语法:

  Set a=123;

  Set b=”zhangsan”;

  或者:

  Select user_name into b from ecs_users where user_id=1;

  这种赋值方法是将Select user_name from ecs_users where user_id=1;查出来的值付给变量b。

  需要返回变量值直接使用select 变量名;

  实例:

  CREATE DEFINER=`root`@`localhost` PROCEDURE `testa`()

  BEGIN

  DECLARE b VARCHAR(10) DEFAULT null;

  set b="Jack"; #声明全局变量

  BEGIN

  DECLARE userscount int default 0; #声明局部变量

  select count(*) into userscount from student; #给变量赋值

  select userscount; #返回变量值

  END;

  BEGIN

  DECLARE avg_score int DEFAULT 0; # 声明局部变量

  select avg(score) into avg_score from student st ,sc where st.sno=sc.sno and sname=b; #给变量赋值,同时使用了全局变量b

  select avg_score; #返回变量值

  END;

  END

  运行结果1:  

软件工程师是如何测试存储过程的(上)(图2)

  五:存储过程参数

  存储过程在定义时可以设置其参数类型,一共有四种情况:

  create procedure testa() #不传递参数

  create procedure testa(in 参数名称 参数类型) #传入参数

  create procedure testa(out 参数名称 参数类型) #返回参数

  create procedure testa(inout 参数名称 参数类型) #可变参数

  1、不传递参数的存储过程

  不传参的存储过程调用时直接为call procedure_name();

  实例:

  CREATE DEFINER=`root`@`localhost` PROCEDURE `DELETE_users`()

  BEGIN

  DELETE from ecs_users where alias="zhangsan";

  END

  运行结果:  

软件工程师是如何测试存储过程的(上)(图3)

  2、in类型

  in类型的参数表示在调用存储过程时必须给该存储过程传入一个值,如果存储过程没有指定参数类型也默认为in类型。IN类型参数一般只用于传入,在调用过程中一般不作为修改和返回。

  实例:

  CREATE DEFINER=`root`@`localhost` PROCEDURE `test1`(in username VARCHAR(20))

  BEGIN

  DECLARE avg_score int DEFAULT 0;

  select avg(score) into avg_score from student st ,sc where st.sno=sc.sno and sname=username;

  select avg_score;

  END

  运行结果:  

软件工程师是如何测试存储过程的(上)(图4)

  3、out类型

  out类型的参数在调用的存储过程时也必须指定,但只能的是变量,不能是常量,只能用于传出值,不能用于传入值,在调用存储过程中可以改变其值,并返回。

  实例:

  CREATE DEFINER=`root`@`localhost` PROCEDURE `test1`(in username VARCHAR(20),out max_score int)

  BEGIN

  select max(score) into max_score from student st ,sc where st.sno=sc.sno and sname=username;

  END

  运行结果:  

软件工程师是如何测试存储过程的(上)(图5)

  4、inout类型

  Inout类型参数集合了in和out类型的所有特征,调用时既可以传入参数值,也可修改参数值,还能返回值。调用时传入参数值只能传入变量,不能是常量。

  实例:

  CREATE DEFINER=`root`@`localhost` PROCEDURE `test2`(inout username VARCHAR(20),inout min_score int)

  BEGIN

  set username="Jack";

  select min(score) into min_score from student st ,sc where st.sno=sc.sno and sname=username;

  END

  运行结果:  

软件工程师是如何测试存储过程的(上)(图6)

  这一章我们学习了测试开发的储存过程的上半部分,下一章我们继续学习测试开发的储存过程的下半部分。大家喜欢的话记得每天来这里和小编一起学习涨薪技能。



相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2021-04-27 16:45:33
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2021-04-27 16:45:33
  • 国外的月亮也不一定比国内测试猿的年薪美~2021-04-27 16:45:33
  • 建筑工程专业朱同学成功转行为软件测试人!2021-04-27 16:45:33
  • 财务管理专业转行软件测试月薪甩会计几条街!2021-04-27 16:45:33
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2021-04-27 16:45:33
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2021-04-27 16:45:33
  • 文科生转行软件测试照样拿下高薪15K!2021-04-27 16:45:33
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2021-04-27 16:45:33
  • 毕业1年,迷茫的他最终选择转行软件测试2021-04-27 16:45:33