1. 程式人生 > 資料庫 >mysql資料建立帶參的儲存過程,並在儲存過程中呼叫另一個儲存過程

mysql資料建立帶參的儲存過程,並在儲存過程中呼叫另一個儲存過程

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

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


 

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

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

 

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

 


 

二.建立輸出引數的儲存過程


 

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)或者直接找到儲存過程,直接執行

 

 


 

四.建立一個帶輸出引數的儲存過程,要求呼叫上一個儲存過程的值

 


要求: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

呼叫儲存過程:

 


 五. 刪除儲存過程


 

DROP  PROCEDURE 儲存過程名

DROP  PROCEDURE proc_auto_date3