数据库题目: 建立存储过程,其功能是查询给定学号的学生的课程平均成绩(必做)、选修课程的门数和不及格

题目:
建立存储过程,其功能是查询给定学号的学生的课程平均成绩(必做)、选修课程的门数和不及格课程门数(选做)。
在本过程设计中,要有下列参数定义:
① 输入参数1个:学号;
② 输出参数1个:课程平均成绩;
③ 输出参数3个:课程平均成绩、选修课程门数、不及格课程门数。(选做)

我的语句:
alter procedure 学生信息;3
@snum varchar(4),
@AvgScore int OUTPUT,
@CourseNum int OUTPUT,
@NotpassNum int OUTPUT
AS

Select @AvgScore = Avg(Score) From SC Where SC.snum = @snum
Select @CourseNum = Count(*) From SC Where SC.snum = @snum
Select @NotpassNum = Count(*) From SC Where SC.snum = @snum and score<60

DECLARE @_temp varchar(4)
DECLARE @AvgScore_out int
DECLARE @CourseNum_out int
DECLARE @NotpassNum_out int
Set @_temp='s001'
exec 学生信息;3 @_temp,@AvgScore_out out,@CourseNum_out out,@NotpassNum_out out

PRINT 's001的课程平均成绩为:'+ CAST(@AvgScore_out as int)+ CAST(@CourseNum_out as int)+ CAST(@NotpassNum_out as int)
程序报错:
服务器: 消息 217,级别 16,状态 1,过程 学生信息,行 17
超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。

希望高人指出错误
这周末要交作业了..请大家帮帮忙哦..
感激不尽
学生信息是个总的存储过程 ;3 是指第三个

第1个回答  2010-12-19
主要问题是存储过程主体缺少begin 和 end 语句,使得后面的测试语句也被编译成了存储过程的主体,从而造成了递归(存储过程调用自己)。
alter procedure 学生信息
@snum varchar(4),
@AvgScore int OUTPUT,
@CourseNum int OUTPUT,
@NotpassNum int OUTPUT
AS
BEGIN
Select @AvgScore = Avg(Score) From SC Where SC.snum = @snum
Select @CourseNum = Count(*) From SC Where SC.snum = @snum
Select @NotpassNum = Count(*) From SC Where SC.snum = @snum and score<60
END

另外,分号是SQL语句的结束符,不明白为什么有存储过程名后面会紧跟着一个分号。本回答被提问者和网友采纳
第2个回答  2010-12-19
学生信息 和 3之间为什么有个分号?

创建一个存储过程,给定某学生学号,要求查询出该学生的姓名,所选课程名...
CREATE PROCEDURE proc_select--建立存储过程 Sno char(10) output,--输入输出参数 Sname varchar(20) out,--输出参数 Cno char(4) out,--输出参数 grade tinyint out--输出参数 AS SELECT @Sname=Sname,@Sno=Student.Sno,@Cno=cno,@grade=grade --select里面写输出参数 FROM Student,SC --...

创建一个带输入参数的存储过程,输入分数参数,执行存储过程得到平均分...
distinct表示查询出的某门课程的最高分和最低分是唯一的。每个参数名前 要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该...

数据库sql语言
3 查询课程名以“数据”两个字开头的所有课程的课程号和课程名。Select cno,cname from c where cname like ‘数据%’4 查询每个学生所有课程的平均成绩,输出学生学号、平均成绩 select sno,avg(grade) from sc group by sno 5 查询每门课程的选修人数,输出课程号、选修人数。Select cno,count(*...

9. 建立存储过程get sum 用于求取特定学生的总成绩.输入参数为学号 输 ...
创建过程:(Oracle)create procedure get_sum(sn int) 这个参数类型要和学号数据类型一致、你根据自己表中换吧 as sumgrade int;begin select SUM(成绩) into sumgrade from 选课表 where 学号=sn;dbms_output.put_line(sumgrade);end get_sum;执行:输出指定学号为1的学生的总成绩 exec get...

数据库SQL语言
Select cno,cname from c where cname like ‘数据%’4 查询每个学生所有课程的平均成绩,输出学生学号、平均成绩select sno,avg(grade) from sc group by sno5 查询每门课程的选修人数,输出课程号、选修人数。Select cno,count(*) from sc group by cno6 查询选修 7号课程的学生的学号、姓名、性别。Select ...

建立一个存储过程student_info,要求根据班级查询学生的学号、姓名、课程...
建立一个存储过程student_info,要求根据班级查询学生的学号、姓名、课程号和分数(表结构如表2,表3) 表2 student字段名 类型 长度 说明学号 字符 9 学号姓名 字符 8 姓名姓名 字符 2 性别班级 字符 4 系别出生日期 日期 8 出生日期表3 成绩表字段名 类型 长度 说明学号 字符 9 课程号 字符 4 成绩 整型 ...

写一个存储过程,学生输入学号和学期,就能查询出这学期的课程,以及成 ...
提示输入一个值来查询;create or replace procedure pro_name (v_id,v_date)--定义变量 as begin --执行部分 select 课程,成绩 into v_id from emp where 学号=&aa and 学期=&bb;--在控制台显示 dbms_output.put_line('学号是:'||v_id||'学期是:'||v_date);--异常处理 exception wh...

...4位代表年级,要统计各个年级不同课程的的平均成绩,显示
用类型转换函数把它转为字符型变量,再用字符串处理函数来取它的前边4位即可。\/*创建存储过程*\/ CREATE PROCEDURE proc_select--建立存储过程 Sno char(10) output--输入输出参数 Sname varchar(20) out--输出参数 Cno char(4) out--输出参数 grade tinyint out--输出参数 ...

在StudentMIS数据库创建proc_test的存储过程,执行功能是从Student和C...
use StudentMIS go create proc proc_test as --这里写查询语句,你没说清你的表 go

几个数据库技术及应用题目
select distinct s.学号,s.姓名,s_c.课程号 from s,s_c where s.学号=s_c.学号 where s_c.成绩=0 4、查询选修课程号为001且成绩为最好的学生的学号、姓名和成绩 select s.学号,s.姓名,max(s_c.成绩) from 学生 s,选课 s_c where s.学号=s_c.学号 and s_c.课程号=‘001’...

相似回答