Cursor function : Cursor function « Cursor « Oracle PL/SQL Tutorial






SQL>
SQL>
SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
  2                    ENAME VARCHAR2(10),
  3                    JOB VARCHAR2(9),
  4                    MGR NUMBER(4),
  5                    HIREDATE DATE,
  6                    SAL NUMBER(7, 2),
  7                    COMM NUMBER(7, 2),
  8                    DEPTNO NUMBER(2));

Table created.

SQL>
SQL> INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK',    7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7521, 'WARD',  'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',  7839, TO_DATE('2-APR-1981',  'DD-MON-YYYY'), 2975, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);

1 row created.

SQL>
SQL> CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );

Table created.

SQL>
SQL> INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');

1 row created.

SQL> INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');

1 row created.

SQL> INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');

1 row created.

SQL> INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

1 row created.

SQL>
SQL> create table dept_fy_budget
  2  ( deptno   number(2) ,
  3    fy       date,
  4    amount   number,
  5    constraint dept_fy_budget_pk primary key(deptno,fy)
  6  )
  7  /

Table created.

SQL> insert into dept_fy_budget values( 10, to_date( '01-jan-1999' ), 500 );

1 row created.

SQL> insert into dept_fy_budget values( 10, to_date( '01-jan-2000' ), 750 );

1 row created.

SQL> insert into dept_fy_budget values( 10, to_date( '01-jan-2001' ), 1000 );

1 row created.

SQL>
SQL> select
  2      dept.deptno, dept.dname,
  3      cursor(select empno from emp where deptno = dept.deptno),
  4      cursor(select fy, amount from dept_fy_budget where deptno = dept.deptno)
  5  from dept
  6  where deptno = 10
  7  /


    DEPTNO DNAME          CURSOR(SELECTEMPNOFR CURSOR(SELECTFY,AMOU
---------- -------------- -------------------- --------------------
        10 ACCOUNTING     CURSOR STATEMENT : 3 CURSOR STATEMENT : 4

CURSOR STATEMENT : 3
drop table emp;

     EMPNO
----------
      7782
      7839
      7934


CURSOR STATEMENT : 4

FY            AMOUNT
--------- ----------
01-JAN-99        500
01-JAN-00        750
01-JAN-01       1000


SQL> SP2-0042: unknown command "table emp" - rest of line ignored.
SQL>
SQL> drop table dept;

Table dropped.

SQL>
SQL> drop table dept_fy_budget;

Table dropped.

SQL>








25.16.Cursor function
25.16.1.Cursor function
25.16.2.A PL/SQL function that uses a cursor expression
25.16.3.Cursor expressions using multiple levels of nested cursors
25.16.4.SYS_REFCURSOR as parameter
25.16.5.Passing data from one table function to another in a pipelined fashion