游标的 PL/SQL 代码中的错误

Posted

技术标签:

【中文标题】游标的 PL/SQL 代码中的错误【英文标题】:Errors in PL/SQL code for Cursor 【发布时间】:2016-05-15 22:40:58 【问题描述】:
Declare 
      vStudent_id     grade.student_id%TYPE;
      vSection_id     grade.section_id%TYPE;
      vNumeric_grade  grade.numeric_grade%TYPE;

      CURSOR gradeCursor IS
             SELECT student_id,section_id,numeric_grade
             FROM grade
             WHERE student_id = 102
             ORDER by numeric_grade;
Begin
  Open gradeCursor;
  LOOP

    FETCH gradeCursor
            INTO vStudent_id,vSection_id,vNumeric_grade;
    EXIT WHEN gradeCursor%NOTFOUND;


    DBMS_OUTPUT.PUT_LINE('Student number: ' || vStudent_id );
    DBMS_OUTPUT.PUT_LINE('Section_id: ' || vSection_id );
    IF numeric_grade IS NOT NULL THEN
                    DBMS_OUTPUT.PUT_LINE('Numeric Grade: ' || vNumeric_grade );
    ELSE
                    DBMS_OUTPUT.PUT_LINE('Numeric Grade:  NULL' );
    END IF;
  END LOOP;
  IF gradeCursor%ISOPEN THEN CLOSE gradeCursor; END IF;

  EXCEPTION
    WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE('Error dected' );
          IF gradeCursor%ISOPEN THEN CLOSE gradeCursor; END IF;
END;

【问题讨论】:

那么,错误信息是什么? 你能标记你的实际 rdbms 而不是“rdbms”吗?我假设是甲骨文 【参考方案1】:

您的代码可以通过排除隐式光标和所有来轻松简化。您可以轻松地使用 FOR 循环来满足您的要求。希望下面的代码有所帮助。

DECLARE
  vStudent_id grade.student_id%TYPE;
  vSection_id grade.section_id%TYPE;
  vNumeric_grade grade.numeric_grade%TYPE;
BEGIN
  FOR I IN
  (SELECT student_id,
    section_id,
    numeric_grade
  FROM grade
  WHERE student_id = 102
  ORDER BY numeric_grade
  )
  LOOP
    DBMS_OUTPUT.PUT_LINE('Student number: ' || i.student_id);
    DBMS_OUTPUT.PUT_LINE('Section_id: ' || i.section_id);
    IF i.numeric_grade IS NOT NULL THEN
      DBMS_OUTPUT.PUT_LINE('Numeric Grade: ' || i.numeric_grade );
    ELSE
      DBMS_OUTPUT.PUT_LINE('Numeric Grade:  NULL' );
    END IF;
  END LOOP;
EXCEPTION
WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('Error dected' );
END;

【讨论】:

以上是关于游标的 PL/SQL 代码中的错误的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL:游标使用中的 ORA-01001

带有游标的 PL/SQL 错误,ERROR ORA-06550

PL/SQL 异常 ORA-06511 游标已打开

PL/SQL 过程、游标、PLS- 00103 错误

过程(PL/SQL 包)中的“ORA-01001 无效游标”

过程中的PL/SQL游标问题