CREATE PROCEDURE AVG_Score(IN sname varchar(8),OUT OUTCName varchar(8),OUT grade DECIMAL(5,2)) BEGIN SELECT FROM course,student,sc WHERE CName=sname; SELECT AVG(grade) INTO grade FROM sc,(SELECT CNo TCNo FROM course WHERE CName=cname) AS T WHERE TCNo=TCNo GROUP BY con; END// DELIMITER ; CALL AVG_Score("数学",@OUTCName,@Score);
时间: 2024-03-13 12:44:02 浏览: 129
根据您提供的代码,这是一个计算某门课程所有学生平均成绩的存储过程,输入参数为课程名称(sname),输出参数为课程名称(OUTCName)和平均成绩(grade)。
以下是对代码的一些修正和说明:
```sql
CREATE PROCEDURE AVG_Score(IN sname VARCHAR(8), OUT OUTCName VARCHAR(8), OUT grade DECIMAL(5,2))
BEGIN
SELECT CName INTO OUTCName FROM course WHERE CName = sname; -- 查询课程名称
SELECT AVG(Grade) INTO grade -- 计算平均成绩
FROM sc
WHERE SC.CNo = (SELECT CNo FROM course WHERE CName = sname); -- 查询课程编号,统计成绩
END;
```
修正说明:
- 在第一行缺少了 `DELIMITER //`,需要添加;
- 在第二行的 `SELECT` 语句中,没有指定查询的字段,需要添加 `CName`;
- 在第三行的 `SELECT` 语句中,`WHERE` 子句需要指定 `SC.CNo`;
- 在第四行的 `GROUP BY` 子句中,应该使用 `CNo` 而不是 `con`。
使用 `CALL` 语句来调用存储过程并获取输出参数:
```sql
CALL AVG_Score('数学', @OUTCName, @Score);
SELECT @OUTCName, @Score;
```
希望这些修正和说明能够帮助您解决问题。如果您还有其他问题,请随时提出。
阅读全文