我有一个表学生,其中包含以下列:
id subject grade date
---|-------|------|-----------|
1 | A | 1 | 01-MAR-10 |
1 | A | 5 | 05-APR-10 |
1 | B | 3 | 01-JUN-10 |
2 | A | 1 | 01-MAR-10 |
2 | C | 3 | 01-APR-10 |
在我的程序中,我传递了学生 ID(p_id),并且我需要为该学生选择所有科目的平均成绩,如果一个学生对同一科目有 2 个成绩,则只计算最新的成绩,如下所示:
对于 p_id=1:
id avgGrade
---|--------|
1 | 4 |
这已经完成了
我现在需要做的是,将有关学生成功的信息保存在字符串中并使用 DBMS_OUTPUT 打印出来。最高分是1分,最低分是5分。如果一个学生只有一个5分(作为一门学科的最后一个分数),不管他的平均分是多少,字符串应该包含“学生不及格”,如果学生没有5 作为最后一个年级,平均 <= 1,5 ,字符串应该包含“完美平均”,否则只是“学生通过”
到目前为止的代码是:
CREATE OR REPLACE Procedure avg_grade
( p_id IN number )
IS
cursor c1 is
select a.id, avg(a.grade) avg_grade
from student a
inner join
(
select id, subject, max(date) max_date
from student
where id=p_id
group by id, subject
)b ON a.id=b.id and
a.subject=b.subject and
a.date=b.max_date
where a.id=p_id
group by id;
cursor c2 is
select grade
from student
where id=p_id;
DECLARE @out as varchar(50)
SET @out=NULL
IF c2.grade IN(5)
BEGIN
SET @out='student failed'
END
ELSE IF c2.grade NOT IN(5) AND c1.avg_grade IN (BETWEEN 1 AND 1,5)
BEGIN
SET @out='student has a perfect average'
END
ELSE
BEGIN
SET @out='student passed'
END
DBMS_OUTPUT.PUT_LINE(@out);
请帮忙