Nested cursor open : Fetch « Cursor « Oracle PL/SQL 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>
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>
SQL>
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>
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.








25.4.Fetch
25.4.1.Fetch data into PL/SQL table
25.4.2.Fetch cursor value into column type variable
25.4.3.Fetch cursor till cursorName%NOTFOUND
25.4.4.Using a simple UPDATE statement without locking for rows fetched from Cursors
25.4.5.To lock all the records while you're working on them. This is done using a SELECT FOR UPDATE command
25.4.6.Fetching Across Commits
25.4.7.Fetching Across Commits, Example 2
25.4.8.Populating a Record with FETCH INTO
25.4.9.cursor bulk
25.4.10.Compare the performance differences between row-at-a-time processing and bulk processing
25.4.11.Raise no data found exception if cursor is empty
25.4.12.Fetch cursor to three variables
25.4.13.Nested cursor open
25.4.14.Fetch cursor till notfound
25.4.15.Fetch cursor to table collection of row type
25.4.16.Fetch cursor value to three variables
25.4.17.Fetch row by row