mysql數據創建帶參的存儲過程,並在存儲過程中調用另一個存儲過程


一.需求:有三張表,分表是學生表,科目表和分數表:

要求:創建一個帶輸出參數的存儲過程,輸出的參數有兩個,第一個輸出參數的值為分數總分/總人數,第二輸出參數的值為分數總分*總人數


 1.學生表(學生號,學生姓名,學生地址)

2.科目表(科目編碼,科目名稱)

 3.分數表(學生號,科目編碼,分數)

 


 二.創建輸出參數的存儲過程


 

CREATE  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; -- 輸出ave
select sum1; --輸出sum1
end


 三.調用帶輸出參數的存儲過程


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

調用成功之后,可以使用

select  @ave -- 單獨輸出@ave的值

select @sum1 -- 單獨輸出@sum1的值

select  @ave,@sum1 -- 同時輸出@ave,@sum1的值

2)或者直接找到存儲過程,直接運行


 四.創建一個帶輸出參數的存儲過程,要求調用上一個存儲過程的值


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


CREATE  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

調用存儲過程:

 


 五. 刪除存儲過程


 DROP  PROCEDURE 存儲過程名

DROP  PROCEDURE proc_auto_date3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM