oracle 我如何消除我所犯的错误?

4zcjmb1e  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(95)

CodeTables
在PL/SQL中,我试图创建一个名为“get_term_gpa”的函数,以学生的pid和yrtrm作为参数,返回学生的GPA术语,并使用GROUP BY函数获得给定pid和yrtrm的gpa的SUM(),然后将SUM()除以该学期所选课程的count(*)以获得该GPA。

jmo0nnb3

jmo0nnb31#

你的错误是你SELECT一个表达式SUM(grade_points)/COUNT(*),但你试图把一件事INTO两个变量。您可能希望将其更改为:

SELECT SUM(grade_points), COUNT(*) INTO v_gpa, v_total_rows

但是,很多函数是不必要的(例如v_totalGROUP BY子句和v_total_rows也是不必要的,如果你使用AVG而不是SUM),你可以简化为:

CREATE FUNCTION get_term_gpa(
  pid   IN ENROLLMENTS.STUDENT_ID%TYPE,
  yrtrm IN ENROLLMENTS.SEMESTER%TYPE
) RETURN NUMBER
IS
  v_gpa ENROLLMENTS.GRADE_POINTS%TYPE;
BEGIN
  SELECT COALESCE(AVG(grade_points), 0)
  INTO   v_gpa
  FROM   enrollments
  WHERE  student_id = pid
  AND    semester   = yrtrm;

  RETURN v_gpa;
END;
/

相关问题