Cursor Oracle PLSQL Tutorial

SQL>
SQL> CREATE TABLE department
  2  (department_id   NUMBER(7),
  3   department_name VARCHAR2(50),
  4   region_id       NUMBER(7));
Table created.
SQL>
SQL> INSERT INTO department VALUES (10, 'FINANCE', 1);
1 row created.
SQL> INSERT INTO department VALUES (31, 'SALES', 1);
1 row created.
SQL> INSERT INTO department VALUES (32, 'ACCOUNTING', 2);
1 row created.
SQL> INSERT INTO department VALUES (33, 'MARKETING', 3);
1 row created.
SQL> INSERT INTO department VALUES (34, 'SECURITY', 4);
1 row created.
SQL> INSERT INTO department VALUES (35, 'PAYROLL', 5);
1 row created.
SQL> INSERT INTO department VALUES (41, 'OPERATIONS', 1);
1 row created.
SQL> INSERT INTO department VALUES (42, 'HUMAN RESOURCES', 2);
1 row created.
SQL> INSERT INTO department VALUES (43, 'STRATEGIC PLANNING', 3);
1 row created.
SQL> INSERT INTO department VALUES (44, 'MAINTENANCE', 4);
1 row created.
SQL> INSERT INTO department VALUES (45, 'TECHNICAL WRITING', 5);
1 row created.
SQL> INSERT INTO department VALUES (50, 'ADMINISTRATION', 1);
1 row created.
SQL>
SQL> CREATE TABLE employee
  2  (employee_id         NUMBER(7),
  3   last_name           VARCHAR2(25),
  4   first_name          VARCHAR2(25),
  5   userid              VARCHAR2(8),
  6   start_date          DATE,
  7   comments            VARCHAR2(255),
  8   manager_id          NUMBER(7),
  9   title               VARCHAR2(25),
 10   department_id       NUMBER(7),
 11   salary              NUMBER(11, 2),
 12   commission_pct      NUMBER(4, 2)
 13  );
Table created.
SQL>
SQL> INSERT INTO employee VALUES (1, 'V', 'Ben', 'cv',to_date('03-MAR-90 8:30', 'dd-mon-yy hh24:mi'),NULL, NULL, 'PRESIDENT', 50, 2500, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (2, 'N', 'Haidy', 'ln', '08-MAR-90', NULL,1, 'VP, OPERATIONS', 41, 1450, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (3, 'N', 'Molly', 'mn', '17-JUN-91',NULL, 1, 'VP, SALES', 31, 1400, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (4, 'S', 'Mark', 'mq', '07-APR-90',NULL, 1, 'VP, FINANCE', 10, 1450, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (5, 'R', 'AUDRY', 'ar', '04-MAR-90',NULL, 1, 'VP, ADMINISTRATION', 50, 1550, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (6, 'U', 'MOLLY', 'mu', '18-JAN-91',NULL, 2, 'WAREHOUSE MANAGER', 41, 1200, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (7, 'M', 'ROBERTA', 'rm', '14-MAY-90',NULL, 2, 'WAREHOUSE MANAGER', 41, 1250, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (8, 'B', 'BEN', 'ry', '07-APR-90', NULL, 2,'WAREHOUSE MANAGER', 41, 1100, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (9, 'C', 'Jane', 'ac', '09-FEB-92',NULL, 2, 'WAREHOUSE MANAGER', 41, 1300, NULL);
1 row created.
SQL> INSERT INTO employee VALUES (10, 'H', 'Mart', 'mh', '27-FEB-91', NULL, 2,'WAREHOUSE MANAGER', 41, 1307, NULL);
1 row created.
SQL>
SQL> DECLARE
  2     CURSOR empCursor IS
  3        SELECT *
  4        FROM   employee;
  5     CURSOR cur_department
  6        (p_department_num department.department_id%TYPE) IS
  7        SELECT department_name
  8        FROM   department
  9        where  department_id = p_department_num;
 10     lv_department_txt department.department_name%TYPE;
 11  BEGIN
 12     FOR empCursor_rec IN empCursor LOOP
 13        OPEN cur_department(empCursor_rec.department_id);
 14        FETCH cur_department INTO lv_department_txt;
 15        CLOSE cur_department;
 16     END LOOP;
 17  END;
 18  /
PL/SQL procedure successfully completed.
SQL>
SQL> drop table employee;
Table dropped.
SQL>
SQL> drop table department;
Table dropped.