Close a cursor after looping
SQL>
SQL> CREATE TABLE myStudent (
2 student_id NUMBER(5) NOT NULL,
3 department CHAR(3) NOT NULL,
4 course NUMBER(3) NOT NULL,
5 grade CHAR(1)
6 );
Table created.
SQL>
SQL> INSERT INTO myStudent (student_id, department, course, grade)
2 VALUES (10000, 'CS', 102, 'A');
1 row created.
SQL>
SQL> INSERT INTO myStudent (student_id, department, course, grade)
2 VALUES (10002, 'CS', 102, 'B');
1 row created.
SQL>
SQL> INSERT INTO myStudent (student_id, department, course, grade)
2 VALUES (10003, 'CS', 102, 'C');
1 row created.
SQL>
SQL> INSERT INTO myStudent (student_id, department, course, grade)
2 VALUES (10000, 'HIS', 101, 'A');
1 row created.
SQL>
SQL> INSERT INTO myStudent (student_id, department, course, grade)
2 VALUES (10001, 'HIS', 101, 'B');
1 row created.
SQL>
SQL> INSERT INTO myStudent (student_id, department, course, grade)
2 VALUES (10002, 'HIS', 101, 'B');
1 row created.
SQL>
SQL>
SQL> set serveroutput on
SQL>
SQL> CREATE OR REPLACE PROCEDURE RSLoop AS
2 v_RSRec myStudent%ROWTYPE;
3 CURSOR c_RSGrades IS SELECT * FROM myStudent ORDER BY grade;
4 BEGIN
5 OPEN c_RSGrades;
6 LOOP
7 FETCH c_RSGrades INTO v_RSRec;
8 EXIT WHEN c_RSGrades%NOTFOUND;
9 END LOOP;
10 CLOSE c_RSGrades;
11
12 DBMS_OUTPUT.PUT_LINE('Last row selected has ID ' || v_RSRec.student_id);
13 END RSLoop;
14 /
Procedure created.
SQL> show errors
No errors.
SQL>
SQL>
SQL>
SQL>
SQL> drop table myStudent;
Table dropped.
Related examples in the same category