Mega Code Archive

 
Categories / Oracle PLSQL / PL SQL
 

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>