Mega Code Archive

 
Categories / Oracle PLSQL / Object Oriented Database
 

Use table function in from clause

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 or replace type emp_type   2    as object   3    (empno       number(4),   4     ename       varchar2(10),   5     job         varchar2(9),   6     mgr         number(4),   7     hiredate    date,   8     sal         number(7, 2),   9     comm        number(7, 2)  10    );  11  / Type created. SQL> SQL> create or replace type emp_tab_type as table of emp_type;   2  / Type created. SQL> create table dept_and_emp   2    (deptno number(2) primary key,   3     dname     varchar2(14),   4     loc       varchar2(13),   5     emps      emp_tab_type   6    )   7    nested table emps store as emps_nt; Table created. SQL> SQL> SQL> SQL> insert into dept_and_emp   2    select dept.*,   3       CAST( multiset( select empno, ename, job, mgr, hiredate, sal, comm from emp ) AS emp_tab_type )   4      from dept   5  / 4 rows created. SQL> SQL> select d.dname, e.empno, ename   2    from dept_and_emp d, table(d.emps) e   3    where d.deptno in ( 10, 20 ); DNAME               EMPNO ENAME -------------- ---------- ---------- ACCOUNTING           7369 SMITH ACCOUNTING           7499 ALLEN ACCOUNTING           7521 WARD ACCOUNTING           7566 JONES ACCOUNTING           7654 MARTIN ACCOUNTING           7698 BLAKE ACCOUNTING           7782 CLARK ACCOUNTING           7788 SCOTT ACCOUNTING           7839 KING ACCOUNTING           7844 TURNER ACCOUNTING           7876 ADAMS ACCOUNTING           7900 JAMES ACCOUNTING           7902 FORD ACCOUNTING           7934 MILLER RESEARCH             7369 SMITH RESEARCH             7499 ALLEN RESEARCH             7521 WARD RESEARCH             7566 JONES RESEARCH             7654 MARTIN RESEARCH             7698 BLAKE RESEARCH             7782 CLARK RESEARCH             7788 SCOTT RESEARCH             7839 KING RESEARCH             7844 TURNER RESEARCH             7876 ADAMS RESEARCH             7900 JAMES RESEARCH             7902 FORD RESEARCH             7934 MILLER 28 rows selected. SQL> SQL> drop table emp cascade constraints; Table dropped. SQL> drop table dept cascade constraints; Table dropped. SQL> drop table dept_and_emp; Table dropped. SQL> drop type emp_tab_type; Type dropped. SQL> drop type emp_type; Type dropped. SQL> SQL> SQL> --