Oracle 尝试创建PL/SQL过程时出现ORA-06550错误

Oracle 尝试创建PL/SQL过程时出现ORA-06550错误,oracle,plsql,Oracle,Plsql,有些东西坏了,但我不知道我错过了什么 select grade.sectionid, grade.studentid, course.courseid FROM section INNER JOIN grade ON grade.sectionid = section.sectionid INNER JOIN course ON course

有些东西坏了,但我不知道我错过了什么

 select 
        grade.sectionid,
        grade.studentid,
        course.courseid
    FROM section
        INNER JOIN grade
                ON grade.sectionid = section.sectionid
        INNER JOIN course
                ON course.courseid = section.courseid;




DECLARE
   CURSOR mycursor is
      select 
        sectionid, studentid, courseid, coursename
      FROM grade, course, section;      
   var_secID NUMBER(10);
   var_studentID NUMBER (10);
   var_gradeLetter CHAR(1);
   var_coursetitle VARCHAR2(25);


BEGIN
   OPEN mycursor;
LOOP
      FETCH mycursor 
      INTO var_secID, var_studentID, var_gradeLetter, var_coursetitle;
      EXIT WHEN mycursor%NOTFOUND;  
      If var_coursetitle(coursename,1) BETWEEN A AND F then
      UPDATE grade
        SET grade = 'A'
        WHERE sectionid;
        END IF;
END LOOP;
CLOSE mycursor;
END;
/
继续获取此错误:

第21行错误:

ORA-06550:第21行第18列:

PL/SQL:ORA-00920:无效的关系运算符

ORA-06550:第19行第4列:

PL/SQL:SQL语句被忽略

BETWEEN A AND F then
或许应该是:

BETWEEN 'A' and 'F' then

您可以在不使用任何PL/SQL的情况下执行此操作,如下所示:

update grade g set grade = 'A'
where  g.sectionid in
       ( select s.sectionid from section s
                join course c on c.courseid = s.courseid
         where  substr(c.coursename,-1, 1) between 'A' and 'F' );
但是,作为PL/SQL学习练习,您可以不使用任何变量或游标管理:

begin
    for r in (
        select g.sectionid, g.studentid, c.courseid, c.coursename
             , substr(c.coursename,-1, 1) as course_lastchar
        from   grade g
               join section s on s.sectionid = g.sectionid
               join course c on c.courseid = s.courseid
        for update of grade
    )
    loop
        if r.course_lastchar between 'A' and 'F' then
            update grade set grade = 'A' where sectionid = r.sectionid;
        end if;
    end loop;
end;

(顺便说一句,有必要养成以一致的缩进大小整齐排列代码的习惯。)

光标定义中的连接
。。。。。。。从年级、课程、部门创建三个表的交叉联接(从这三个表中生成所有行的所有可能组合),因此我不太确定您希望使用此查询实现什么。我创建了一个触发器以将成绩填充到我的成绩表中。我希望该程序能查看学生课程名称的最后一个字母,并根据最后一个字母分配分数(a-F)。这有助于澄清问题吗?(这是我第一次使用数据库或SQL,所以我还是一个新手,正在努力解决问题)。最后,你有了
。。。更新等级。。。其中sectionid这是什么意思?我在哪里什么?这里缺少了一些内容。正如mathguy提到的,编译器希望在
where sectionid
后面有一个关系运算符,例如
where sectionid=var\u secID