go create procedure 学生课程总学分存储 @班级号 char(9), @info cursor varying output as set @info = cursor scroll for select student.学号, 姓名, sum(课时) 总学分 from student inner join grade on student.学号 = grade.学号 inner join course on grade.课程号 = course.课程号 inner join class on student.班级号 = class.班级号 where class.班级号 = @班级号 group by student.学号, 姓名 order by student.学号 open @info go declare @inforcursor cursor exec 学生课程总学分存储 @班级号 = 11, @info = @inforcursor output fetch first from @inforcursor while @@fetch_status = 0 begin fetch next from @inforcursor end close @inforcursor
时间: 2024-02-14 09:16:08 浏览: 89
SQL 存储过程基础语法之一
根据您提供的代码,我看到您使用了 T-SQL 的存储过程语法,但是缺少了结束存储过程的语句。您可以在最后添加 `go` 语句来结束存储过程的定义,例如:
```
create procedure 学生课程总学分存储
@班级号 char(9),
@info cursor varying output
as
set @info = cursor scroll for
select student.学号, 姓名, sum(课时) 总学分
from student
inner join grade on student.学号 = grade.学号
inner join course on grade.课程号 = course.课程号
inner join class on student.班级号 = class.班级号
where class.班级号 = @班级号
group by student.学号, 姓名
order by student.学号
open @info
go -- 添加此行以结束存储过程的定义
declare @inforcursor cursor
exec 学生课程总学分存储 @班级号 = '11', @info = @inforcursor output
fetch first from @inforcursor
while @@fetch_status = 0
begin
fetch next from @inforcursor
end
close @inforcursor
deallocate @inforcursor
```
此外,我还发现您在调用存储过程时,传入的班级号参数应该是一个字符串类型的值,因此需要将 `@班级号 = 11` 改为 `@班级号 = '11'`。
阅读全文