Sql 使用显式光标计算每个学生的总学分和总分数
我试图使用PL/SQL游标计算每个学生的总学分和总分数,并使用ROUND函数计算GPA。我不知道我在这里做错了什么 我犯了很多错误 输出应如下所示: 学生姓名:Pete BK 101地理入门3B BK 102照片介绍3c BK 140数学数学3 C简介 总学分:9 总平均成绩:2.33Sql 使用显式光标计算每个学生的总学分和总分数,sql,oracle,plsql,Sql,Oracle,Plsql,我试图使用PL/SQL游标计算每个学生的总学分和总分数,并使用ROUND函数计算GPA。我不知道我在这里做错了什么 我犯了很多错误 输出应如下所示: 学生姓名:Pete BK 101地理入门3B BK 102照片介绍3c BK 140数学数学3 C简介 总学分:9 总平均成绩:2.33 DECLARE CURSOR studentCursor IS SELECT StudentName, CourseID, CourseDescription, CourseCredits, Grade FRO
DECLARE
CURSOR studentCursor IS SELECT StudentName, CourseID, CourseDescription,
CourseCredits, Grade
FROM SampleStudent;
s_StudentName VarChar2 (30)
s_CourseID Varchar2 (20)
s_CourseDescription VarChar2 (30)
s_CourseCredits VarChar2 (2)
s_Grade VarChar (2)
s_GradePoint
BEGIN
OPEN studentcursor;
LOOP
FETCH studentcursor INTO s_StudentName, s_CourseID,
s_CourseDescription, s_CourseCredits, s_Grade;
EXIT WHEN studentcursor%NOTFOUND;
IF s_Grade = 'A' THEN s_GradePoint := 4
IF s_Grade = 'B' THEN s_GradePoint := 3
IF s_Grade = 'C' THEN s_GradePoint := 2
END IF;
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE('Student Name: ' || s_StudentName);
DBMS_OUTPUT.PUT_LINE(s_CourseDescription || s_CourseCredits || s_Grade);
DBMS_OUTPUT.PUT_LINE('Total Credits:' || SUM(s_CourseCredits);
DBMS_OUTPUT.PUT_LINE('Overall GPA:' || ROUND()
END LOOP;
CLOSE studentCursor;
DBMS_OUTPUT.PUT_LINE('GRAND TOTAL VALUE OF ALL ITEMS:');
END;
/
我不是在测试这个块,但我认为你应该像这样使用你的块:
DECLARE
V_TOTAL_CREDITS NUMBER := 0;
BEGIN
FOR RC IN (
SELECT StudentName,
CourseID,
CourseDescription,
Grade,
DECODE(GRADE, 'A', 4, 'B', 3, 'C', 2) GRADE_POINT,
CourseCredits,
SUM(CourseCredits) OVER(PARTITION BY StudentName ORDER BY CourseID) SUM_COURSE_CREDITS,
AVG(CourseCredits) OVER(PARTITION BY StudentName ORDER BY CourseID) GPA
FROM SampleStudent
)
LOOP
V_TOTAL_CREDITS := V_TOTAL_CREDITS + RC.CourseCredits;
DBMS_OUTPUT.PUT_LINE('Student Name: ' || RC.StudentName);
DBMS_OUTPUT.PUT_LINE(RC.CourseID || ' ' ||
RC.CourseCredits || ' INTRO TO ' ||
RC.CourseDescription || ' ' ||
GRADE_POINT || ' ' ||
s_Grade);
DBMS_OUTPUT.PUT_LINE('Total Credits:' || RC.SUM_COURSE_CREDITS);
DBMS_OUTPUT.PUT_LINE('Overall GPA:' || RC.GPA);
END LOOP;
DBMS_OUTPUT.PUT_LINE('GRAND TOTAL VALUE OF ALL ITEMS:' || V_TOTAL_CREDITS);
END;
这是另一个带有光标的块:
DECLARE
V_TOTAL_CREDITS NUMBER := 0;
V_STUDENT_NAME VARCHAR2(100);
V_COURSE_ID VARCHAR2(50);
V_COURSE_DESCRIPTION VARCHAR2(200);
V_GRADE VARCHAR2(10);
V_GRADE_POINT PLS_INTEGER;
V_COURSE_CREDITS NUMBER;
V_SUM_COURSE_CREDITS NUMBER;
V_GPA NUMBER;
CURSOR STUDENT_CURSOR IS
SELECT StudentName,
CourseID,
CourseDescription,
Grade,
DECODE(GRADE, 'A', 4, 'B', 3, 'C', 2) GRADE_POINT,
CourseCredits,
SUM(CourseCredits) OVER(PARTITION BY StudentName ORDER BY CourseID) SUM_COURSE_CREDITS,
AVG(CourseCredits) OVER(PARTITION BY StudentName ORDER BY CourseID) GPA
FROM SampleStudent;
BEGIN
OPEN STUDENT_CURSOR;
LOOP
FETCH STUDENT_CURSOR INTO V_STUDENT_NAME,
V_COURSE_ID,
V_COURSE_DESCRIPTION,
V_GRADE,
V_GRADE_POINT,
V_COURSE_CREDITS,
V_SUM_COURSE_CREDITS,
V_GPA;
EXIT WHEN STUDENT_CURSOR%NOTFOUND;
V_TOTAL_CREDITS := V_TOTAL_CREDITS + V_COURSE_CREDITS;
DBMS_OUTPUT.PUT_LINE('Student Name: ' || V_STUDENT_NAME);
DBMS_OUTPUT.PUT_LINE(V_COURSE_ID || ' ' ||
V_COURSE_CREDITS || ' INTRO TO ' ||
V_COURSE_DESCRIPTION || ' ' ||
V_GRADE_POINT || ' ' ||
V_GRADE);
DBMS_OUTPUT.PUT_LINE('Total Credits:' || V_SUM_COURSE_CREDITS);
DBMS_OUTPUT.PUT_LINE('Overall GPA:' || V_GPA);
END LOOP;
CLOSE STUDENT_CURSOR;
DBMS_OUTPUT.PUT_LINE('GRAND TOTAL VALUE OF ALL ITEMS:' || V_TOTAL_CREDITS);
END;
当一个简单的
SELECT
查询足够时,不要使用游标。很抱歉,这是一个赋值,必须是游标。对不起,我需要它是游标。您可以在游标中使用该查询。但是请注意,您的代码有一些编译和语法错误。谢谢。这很有帮助。唯一缺少的是GPA必须按平均分数计算。输出返回的值全部为3。