Close a cursor and open it again with another query
SQL> CREATE TABLE place (
2 room_id NUMBER(5) PRIMARY KEY,
3 building VARCHAR2(15),
4 room_number NUMBER(4),
5 number_seats NUMBER(4),
6 description VARCHAR2(50)
7 );
Table created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20001, 'Building 7', 201, 1000, 'Large Lecture Hall');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20002, 'Building 6', 101, 500, 'Small Lecture Hall');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20003, 'Building 6', 150, 50, 'Discussion Room A');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20004, 'Building 6', 160, 50, 'Discussion Room B');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats,description)
2 VALUES (20005, 'Building 6', 170, 50, 'Discussion Room C');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20006, 'Music Building', 100, 10, 'Music Practice Room');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20007, 'Music Building', 200, 1000, 'Concert Room');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20008, 'Building 7', 300, 75, 'Discussion Room D');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats,description)
2 VALUES (20009, 'Building 7', 310, 50, 'Discussion Room E');
1 row created.
SQL>
SQL> set serveroutput on
SQL>
SQL> DECLARE
2 TYPE roomCursor IS REF CURSOR RETURN place%ROWTYPE;
3 roomCursorV roomCursor;
4 v_Rooms place%ROWTYPE;
5 BEGIN
6 OPEN roomCursorV FOR SELECT * FROM place WHERE building = 'Building 7';
7 LOOP
8 FETCH roomCursorV INTO v_Rooms;
9 EXIT WHEN roomCursorV%NOTFOUND;
10 DBMS_OUTPUT.PUT_LINE('Fetched Room #' || v_Rooms.room_number ||' in Building 7 from roomCursorV');
11 END LOOP;
12 CLOSE roomCursorV;
13 OPEN roomCursorV FOR SELECT * FROM place WHERE number_seats > 100;
14 LOOP
15 FETCH roomCursorV INTO v_Rooms;
16 EXIT WHEN roomCursorV%NOTFOUND;
17 DBMS_OUTPUT.PUT_LINE('Fetched ' || v_Rooms.building || ',' ||' Room #' || v_Rooms.room_number || ' from roomCursorV');
18 END LOOP;
19
20 CLOSE roomCursorV;
21 END;
22 /
Fetched Room #201 in Building 7 from roomCursorV
Fetched Room #300 in Building 7 from roomCursorV
Fetched Room #310 in Building 7 from roomCursorV
Fetched Building 7, Room #201 from roomCursorV
Fetched Building 6, Room #101 from roomCursorV
Fetched Music Building, Room #200 from roomCursorV
PL/SQL procedure successfully completed.
SQL>
SQL> drop table place;
Table dropped.
SQL>
SQL>
Related examples in the same category