oracle 奇怪的错误,导致我的脚本无法运行

lnvxswe2  于 2023-11-17  发布在  Oracle
关注(0)|答案(4)|浏览(167)

我试图运行一个pl/sql程序,我已经附上下面,并得到以下错误时,运行我的脚本

DBMS_OUTPUT.ENABLE;

create or replace procedure grade_point212
is
cursor c1 is
----Cursor declaration--
SELECT student.student_id, student.first_name, student.last_name, course.course_id, course.course_name, class.grade
FROM CLASS
JOIN STUDENT
  ON student.student_id = class.student_id
  JOIN course
  ON course.course_id = class.course_id
order by 1;
----Variable declation--
v_student_id student.student_id%type;
v_first_name  student.first_name%type;
v_last_name student.last_name%type;
v_course_id course.course_id%type;
v_course_name course.course_name%type;
v_grade class.grade%type;
-- 3 additional variables --
prev_student student.student_id%type;
course_count  number(3);
grade_point_total  number(3);
----mainline--
begin
    open c1; 
    loop
--Get the first row in the cursor--
    fetch c1 
    into v_student_id,v_first_name ,v_last_name,v_course_id,v_course_name,v_grade;
    exit when c1%notfound;
--Set the prev_student to the cursor’s student id--
        prev_student:=v_student_id;
--Set the grade_point _total to 0--
        grade_point_total:=0;
--Set the course_count to 0--
        course_count:=0;
--If the prev_studentis NOT equal to cursor’s student id--
            IF prev_student!=v_student_id  THEN
--Print out the grade point average which is grade_point_total divided by course_count--
                DBMS_OUTPUT.PUT_LINE(grade_point_total/course_count); 
--Set prev_student to the cursor’s student id--
                prev_student:=v_student_id;
--Set the grade_point_total to 0--
                grade_point_total:=0;
--Set the course_count to 0--
                course_count:=0;
            END IF;
--Add the grade point of the cursor’s grade to grade_point_total--
grade_point_total:=grade_point_total+GradePoint(v_grade);
--Add 1 to the course_count--
course_count:=course_count+1;
--Print out the current row--
 DBMS_OUTPUT.PUT_LINE(v_student_id||' '||v_first_name||' '||v_last_name||' '||v_course_id||' '||v_course_name||' '||v_grade); 
--Fetch a new row--
 fetch c1 
 into v_student_id,v_first_name ,v_last_name,v_course_id,v_course_name,v_grade;
end loop; 
--Close the cursor--
close c1; 
--Print out the grade point average which is grade_point_total divided by course_count--
DBMS_OUTPUT.PUT_LINE(grade_point_total/course_count);
end;

set serveroutput on;
begin
 grade_point212;
end;

个字符

irtuqstp

irtuqstp1#

“/”是正确的。作为后续工作,您使用什么工具将脚本发送到数据库?
SQLPlus使用独立的“/”行作为字符串序列完成的指示符,因此可以发送到数据库进行编译和执行。如果您不提供“/”,您将获得错误,仔细阅读时将指示某些编译失败,因为您发送的序列实际上将由多个SQL,SQLPlus和PLSQL块组成。
execute关键字BTW,如下所示:
exec dbms_output.enable;
是SQLPlus syntactic sugar,由SQLPlus转换为:
开始dbms_output.enable; end;

smtd7mpg

smtd7mpg2#

在你的数据库管理系统前尝试执行。
exec dbms_output.enable;

krcsximq

krcsximq3#

完全删除第一行(DBMS_OUTPUT.ENABLE;)。set serveroutput on(在执行过程之前)将启用它。
或者,将其封装到过程或匿名PL/SQL块本身中,例如:

SQL> begin
  2    dbms_output.enable;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL>

字符串

5us2dqdw

5us2dqdw4#

执行“CREATE OR REPLACE”语句时漏掉了结尾的“/”。“;”正如here所解释的,分号结束了pl/sql语句,但需要斜杠来执行它。
错误“Encountered the symbol“SET”Errors:check compiler log“引用了“set serveroutput on”语句中的“SET”字符串。

...
DBMS_OUTPUT.PUT_LINE(grade_point_total/course_count);
end;
/  <<< Add this 

set serveroutput on;
begin
 grade_point212;
end;
/  <<< Add this

字符串

相关问题