mysql数据创建带参的存储过程,并在存储过程中调用另一个存储过程

一.需求:有三张表,分表是学生表,科目表和分数表:

要求:创建一个带输出参数的存储过程,输出的参数有两个,第一个输出参数的值为分数总分/总人数,第二输出参数的值为分数总分*总人数


 

1.学生表(学生号,学生姓名,学生地址)

mysql数据创建带参的存储过程,并在存储过程中调用另一个存储过程

2.科目表(科目编码,科目名称)

mysql数据创建带参的存储过程,并在存储过程中调用另一个存储过程

 

 3.分数表(学生号,科目编码,分数)

 mysql数据创建带参的存储过程,并在存储过程中调用另一个存储过程


 

二.创建输出参数的存储过程


 

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_auto_date2`(
out ave FLOAT,out sum1 FLOAT)
begin
DECLARE score1 FLOAT; -- 声明变量score1
DECLARE number1 int; -- 声明变量number1
set ave=0; -- 设置ave输出参数的默认值为0
set sum1=0; -- 设置sum1输出参数的默认值为0
select sum(score) from score into score1; -- score1变量值
select count(*) from student into number1; -- number1变量值
select score1/number1 into ave; -- ave变量值
-- set ave=score1/number;
select score1*number1 into sum1; -- sum1变量值
select ave;
select sum1;
end


 

三.调用带输出参数的存储过程


 

1)使用call  proc_auto_date2(@ave,@sum1);

2)或者直接找到存储过程,直接运行

mysql数据创建带参的存储过程,并在存储过程中调用另一个存储过程

 

 


 

四.创建一个带输出参数的存储过程,要求调用上一个存储过程的值

 


要求:call  proc_auto_date2(@ave,@sum1)的@ave,@sum1值进行求和


CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_auto_date3`(
out test1 int)
-- test1为输出参数
begin
declare number2 int;
declare ave FLOAT; -- 声明ave为存储过程proc_auto_date2的第一个输出参数
declare sum1 FLOAT; -- 声明sum1为存储过程proc_auto_date2的第二个输出参数
set number2=200;
-- 调用存储过程 proc_auto_date2(ave,sum1)
call proc_auto_date2(ave,sum1) ;
-- 将存储过程proc_auto_date2的两个输出参数的和+number2变量的值赋值给test1输出参数
set test1=@ave+@sum1+number2;
select test1;
end

调用存储过程:

mysql数据创建带参的存储过程,并在存储过程中调用另一个存储过程

 


 五. 删除存储过程


 

DROP  PROCEDURE 存储过程名

DROP  PROCEDURE proc_auto_date3

 

上一篇:noip.ac 3286


下一篇:boost::units模块实现带有转换的用户定义单位的测试程序