游标的 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 错误,ERROR ORA-06550