實驗六 存儲過程建立與調用
一、實驗目的
理解存儲過程的概念、建立和調用方法。
二、實驗環境
三、實驗示例
1、定義一個函數,按性別計算所有學生的平均年齡。
CREATE FUNCTION aver_age(@sex char(2)) RETURNS int
AS
BEGIN
DECLARE @aver int
SELECT @aver=
( SELECT avg(年齡)
FROM s
WHERE sex=@SEX
)
RETURN @aver
END
GO
如下程序對上例定義的aver_age函數進行調用。
USE student /*用戶函數在此數據庫中已定義*/
/*定義局部變量*/
DECLARE @sex char(2)
DECLARE @aver1 int
/*給局部變量賦值*/
SELECT @sex = ‘女’
SELECT @aver1=dbo.aver_age(@sex) /*調用用戶函數,並將返回值賦給局部變量*/
/*顯示局部變量的值*/
SELECT @aver1 AS '男性學生的平均年齡'
2、利用student數據庫中的S、SC表,編寫一無參存儲過程用於查詢每個學生的選課情況,然后調用該存儲過程。
CREATE PROCEDURE xuanke_info
AS
SELECT S.#,sname,sex,age,c#,score
FROM S INNER JOIN sc
ON s.s#=sc.s#
GO
3、使用帶參數的存儲過程
創建存儲過程,根據student數據庫的3個表查詢指定學生的選課情況。
CREATE PROCEDURE stu_info @sname (8)
AS
SELECT S.#,sname,sex,age,c#,cname,score
FROM S,SC,C
Where s.s#=sc.s# and sc.c#=c.c# and sname=@sname
GO
EXECUTE stu_info '張三'
4、使用帶OUTPUT參數的存儲過程
編寫存儲過程,根據給定的學生學號,計算該生的平均成績
Create procedure stuavg @sno char(4) @s_sum float output,@s_avg float output
As
Select @s_sum=sum(score),s_avg=avg(score)
From sc
Where s#=@sno
在調用存儲過程stuavg時,存儲過程定義時的形參名和調用時的變量名不一定要匹配,不過數據類型和參數位置必須匹配。不過數據類型和參數位置必須匹配。執行語句如
DECLARE @x float,@y float
EXECUTE stuavg ‘s3’',@x OUTPUT,@y output
SELECT @x, @y
GO