Cursor operation between package functions
SQL> SQL> CREATE TABLE lecturer ( 2 id NUMBER(5) PRIMARY KEY, 3 first_name VARCHAR2(20), 4 last_name VARCHAR2(20), 5 major VARCHAR2(30), 6 current_credits NUMBER(3) 7 ); Table created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10001, 'Scott', 'Lawson','Computer Science', 11); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major, current_credits) 2 VALUES (10002, 'Mar', 'Wells','History', 4); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10003, 'Jone', 'Bliss','Computer Science', 8); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10004, 'Man', 'Kyte','Economics', 8); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10005, 'Pat', 'Poll','History', 4); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10006, 'Tim', 'Viper','History', 4); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10007, 'Barbara', 'Blues','Economics', 7); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10008, 'David', 'Large','Music', 4); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10009, 'Chris', 'Elegant','Nutrition', 8); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10010, 'Rose', 'Bond','Music', 7); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10011, 'Rita', 'Johnson','Nutrition', 8); 1 row created. SQL> SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits) 2 VALUES (10012, 'Sharon', 'Clear','Computer Science', 3); 1 row created. SQL> SQL> SQL> SQL> CREATE OR REPLACE PACKAGE StudentFetch AS 2 TYPE t_lecturer IS TABLE OF lecturer%ROWTYPE 3 INDEX BY BINARY_INTEGER; 4 PROCEDURE OpenCursor; 5 PROCEDURE CloseCursor; 6 FUNCTION FetchRows(p_BatchSize IN OUT NUMBER,p_lecturer OUT t_lecturer) 7 RETURN BOOLEAN; 8 PROCEDURE PrintRows(p_BatchSize IN NUMBER, 9 p_lecturer IN t_lecturer); 10 END StudentFetch; 11 / Package created. SQL> show errors No errors. SQL> SQL> CREATE OR REPLACE PACKAGE BODY StudentFetch AS 2 CURSOR myAllLecturer IS 3 SELECT * 4 FROM lecturer 5 ORDER BY ID; 6 7 PROCEDURE OpenCursor IS 8 BEGIN 9 OPEN myAllLecturer; 10 END OpenCursor; 11 12 PROCEDURE CloseCursor IS 13 BEGIN 14 CLOSE myAllLecturer; 15 END CloseCursor; 16 17 FUNCTION FetchRows(p_BatchSize IN OUT NUMBER, 18 p_lecturer OUT t_lecturer) 19 RETURN BOOLEAN IS 20 v_Finished BOOLEAN := TRUE; 21 BEGIN 22 FOR v_Count IN 1..p_BatchSize LOOP 23 FETCH myAllLecturer INTO p_lecturer(v_Count); 24 IF myAllLecturer%NOTFOUND THEN 25 v_Finished := FALSE; 26 p_BatchSize := v_Count - 1; 27 EXIT; 28 END IF; 29 END LOOP; 30 RETURN v_Finished; 31 END FetchRows; 32 33 PROCEDURE PrintRows(p_BatchSize IN NUMBER, 34 p_lecturer IN t_lecturer) IS 35 BEGIN 36 FOR v_Count IN 1..p_BatchSize LOOP 37 DBMS_OUTPUT.PUT('ID: ' || p_lecturer(v_Count).ID); 38 DBMS_OUTPUT.PUT(' Name: ' || p_lecturer(v_Count).first_name); 39 DBMS_OUTPUT.PUT_LINE(' ' || p_lecturer(v_Count).last_name); 40 END LOOP; 41 END PrintRows; 42 END StudentFetch; 43 / Package body created. SQL> show errors No errors. SQL> SQL> SQL> SQL> drop table lecturer; Table dropped. SQL>