定义具有参数属性的存储过程。创建名为insrectos的存储过程,该存储过程的功能是从student表中根据学号查询某一学生的姓名和年龄并返回。执行该存储过程。
1、定义储存过程:
delimiter //
drop procedure if exists insrectos;
create procedure insrectos (in sn int,out age int,out student_name varchar(10))
begin
select sage,sname
into age,student_name
from student
where sno = sn;
end//
然后,可以看到,上面的过程中,delimiter是建立了一个储存过程的语段,后面的“//”。Delimiter类似于一种解释器,其中,默认的情况下为”;”,所以,改为“//”,之后,会对之后的”;”不采取执行作用,直到遇到了下一个”//”,才会执行上面的代码,也就是说上面的代码中,只有在全部打完之后,才会被执行,这个就是分隔符的用法了。
另外,关于储存过程,其中in和out分别对应着传入参数和传出参数,所以,需要通过这些来定义变量名和变量类型。在里面的话,有着begin和end来区分开选择条件,将选好的变量值赋值给我们设定的传出得参数的值,这样的话,就可以传输参数了。
储存过程定义完之后,需要的就是调用了。
2、调用储存过程:
delimiter ;
set @age = 1, @sno = 2005003,@student_name = 1;
call insrectos (@sno,@age,@student_name);
select @student_name,@age;
其中delimiter是将后面的”;”作为分隔符,所以,后面的话,是每一句话都写完就执行的。所以,需要知道的就是这些是将之前的改回来了,变为正常的编辑器可以识别的类型了。在调用的时候,需要传入数据,就算是输出的数据也需要设定好变量名称,传入到存储过程中。因此,在后面得到需要的值的时候,才可以很方便的得到对应的结果。
3、实验结果:
从student表中随便找一个人可以看下结果如何:
上面的代码中,输入的是学号为2005003,所以,输出应该是“利民”“20”,和student的表格中的结果是一致的,所以,结果是正确的。
4、完整代码
delimiter //
drop procedure if exists insrectos;
create procedure insrectos (in sn int,out age int,out student_name varchar(10))
begin
select sage,sname
into age,student_name
from student
where sno = sn;
end//
delimiter ;
set @age = 1, @sno = 2005003,@student_name = 1;
call insrectos (@sno,@age,@student_name);
select @student_name,@age;