<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FObject_Oriented%2Ftable_function</id>
		<title>Oracle PL/SQL Tutorial/Object Oriented/table function - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FObject_Oriented%2Ftable_function"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/table_function&amp;action=history"/>
		<updated>2026-05-25T21:51:21Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/table_function&amp;diff=2973&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/table_function&amp;diff=2973&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:45, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/table_function&amp;diff=2974&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/table_function&amp;diff=2974&amp;oldid=prev"/>
				<updated>2010-05-26T10:04:35Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Pipelined Table Functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE address AS OBJECT&lt;br /&gt;
  2              (line1 VARCHAR2(20),&lt;br /&gt;
  3               line2 VARCHAR2(20),&lt;br /&gt;
  4               city VARCHAR2(20),&lt;br /&gt;
  5               state_code VARCHAR2(2),&lt;br /&gt;
  6               zip VARCHAR2(13));&lt;br /&gt;
  7  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE temp_adds IS TABLE OF address;&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE FUNCTION myProc&lt;br /&gt;
  2  RETURN temp_adds PIPELINED&lt;br /&gt;
  3  IS&lt;br /&gt;
  4    addressValue address;&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    FOR i IN 1..5 LOOP&lt;br /&gt;
  7      IF (i=1) THEN&lt;br /&gt;
  8        addressValue := address(&amp;quot;St.&amp;quot;,null,&amp;quot;York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;22222&amp;quot;);&lt;br /&gt;
  9      ELSIF (i=2) THEN&lt;br /&gt;
 10        addressValue := address(&amp;quot;Suite&amp;quot;,&amp;quot;Blvd&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;IL&amp;quot;,&amp;quot;33333&amp;quot;);&lt;br /&gt;
 11      ELSIF (i=3) THEN&lt;br /&gt;
 12        addressValue := address(&amp;quot;1 Dr.&amp;quot;,null,&amp;quot;P&amp;quot;,&amp;quot;NJ&amp;quot;,&amp;quot;33333&amp;quot;);&lt;br /&gt;
 13      ELSIF (i=4) THEN&lt;br /&gt;
 14        addressValue := address(&amp;quot;#9&amp;quot;,&amp;quot;Avenue&amp;quot;,&amp;quot;Dallas&amp;quot;,&amp;quot;TX&amp;quot;,&amp;quot;11111&amp;quot;);&lt;br /&gt;
 15      ELSIF (i=5) THEN&lt;br /&gt;
 16        addressValue := address(&amp;quot;1 Ct.&amp;quot;,null,&amp;quot;F&amp;quot;,&amp;quot;MA&amp;quot;,&amp;quot;44444&amp;quot;);&lt;br /&gt;
 17      END IF;&lt;br /&gt;
 18      PIPE ROW(addressValue);&lt;br /&gt;
 19    END LOOP;&lt;br /&gt;
 20    RETURN;&lt;br /&gt;
 21  END;&lt;br /&gt;
 22  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt; show errors&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM TABLE(myProc);&lt;br /&gt;
LINE1                LINE2                CITY                 ST&lt;br /&gt;
-------------------- -------------------- -------------------- --&lt;br /&gt;
ZIP&lt;br /&gt;
-------------&lt;br /&gt;
St.                  null                 York                 NY&lt;br /&gt;
22222&lt;br /&gt;
Suite                Blvd                 B                    IL&lt;br /&gt;
33333&lt;br /&gt;
1 Dr.                null                 P                    NJ&lt;br /&gt;
33333&lt;br /&gt;
#9                   Avenue               Dallas               TX&lt;br /&gt;
11111&lt;br /&gt;
1 Ct.                null                 F                    MA&lt;br /&gt;
44444&lt;br /&gt;
&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type address force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type temp_adds force;&lt;br /&gt;
Type dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Table Functions involving Object Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE address AS OBJECT&lt;br /&gt;
  2              (line1 VARCHAR2(20),&lt;br /&gt;
  3               line2 VARCHAR2(20),&lt;br /&gt;
  4               city VARCHAR2(20),&lt;br /&gt;
  5               state_code VARCHAR2(2),&lt;br /&gt;
  6               zip VARCHAR2(13));&lt;br /&gt;
  7  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE temp_adds IS TABLE OF address;&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE FUNCTION f_table_obj RETURN temp_adds&lt;br /&gt;
  2  IS&lt;br /&gt;
  3&lt;br /&gt;
  4    v_temp_adds temp_adds :=temp_adds();&lt;br /&gt;
  5&lt;br /&gt;
  6  BEGIN&lt;br /&gt;
  7&lt;br /&gt;
  8    v_temp_adds.EXTEND(5);&lt;br /&gt;
  9&lt;br /&gt;
 10    v_temp_adds(1):= address(&amp;quot;a&amp;quot;,null,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;10020&amp;quot;);&lt;br /&gt;
 11&lt;br /&gt;
 12    v_temp_adds(2):= address(&amp;quot;S&amp;quot;,&amp;quot;Blvd&amp;quot;,&amp;quot;Bloomington&amp;quot;,&amp;quot;IL&amp;quot;,&amp;quot;33333&amp;quot;);&lt;br /&gt;
 13&lt;br /&gt;
 14    v_temp_adds(3):= address(&amp;quot;1  Dr.&amp;quot;,null,&amp;quot;Vancouver&amp;quot;,&amp;quot;NJ&amp;quot;,&amp;quot;22222&amp;quot;);&lt;br /&gt;
 15&lt;br /&gt;
 16    v_temp_adds(4):= address(&amp;quot;#9&amp;quot;,&amp;quot;H Avenue&amp;quot;,&amp;quot;Dallas&amp;quot;,&amp;quot;TX&amp;quot;,&amp;quot;11111&amp;quot;);&lt;br /&gt;
 17&lt;br /&gt;
 18    v_temp_adds(5):= address(&amp;quot;1 Ct.&amp;quot;,null,&amp;quot;Franklin&amp;quot;,&amp;quot;MA&amp;quot;,&amp;quot;44444&amp;quot;);&lt;br /&gt;
 19&lt;br /&gt;
 20    RETURN (v_temp_adds);&lt;br /&gt;
 21&lt;br /&gt;
 22  END;&lt;br /&gt;
 23  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt; show errors&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM TABLE(f_table_obj);&lt;br /&gt;
LINE1                LINE2                CITY                 ST&lt;br /&gt;
-------------------- -------------------- -------------------- --&lt;br /&gt;
ZIP&lt;br /&gt;
-------------&lt;br /&gt;
a                    null                 New York             NY&lt;br /&gt;
10020&lt;br /&gt;
S                    Blvd                 Bloomington          IL&lt;br /&gt;
33333&lt;br /&gt;
1  Dr.               null                 Vancouver            NJ&lt;br /&gt;
22222&lt;br /&gt;
#9                   H Avenue             Dallas               TX&lt;br /&gt;
11111&lt;br /&gt;
1 Ct.                null                 Franklin             MA&lt;br /&gt;
44444&lt;br /&gt;
&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type address force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type temp_adds force;&lt;br /&gt;
Type dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Table Functions with table of numbers==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type numberTableType is table of number;&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace function f_table return numberTableType&lt;br /&gt;
  2  is&lt;br /&gt;
  3    v_numarray numberTableType :=numberTableType();&lt;br /&gt;
  4  begin&lt;br /&gt;
  5    FOR i in 1..10 loop&lt;br /&gt;
  6      v_numarray.EXTEND;&lt;br /&gt;
  7      v_numarray(i):=i+100;&lt;br /&gt;
  8    END LOOP;&lt;br /&gt;
  9    RETURN (v_numarray);&lt;br /&gt;
 10  end;&lt;br /&gt;
 11  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM TABLE(f_table);&lt;br /&gt;
COLUMN_VALUE&lt;br /&gt;
------------&lt;br /&gt;
         101&lt;br /&gt;
         102&lt;br /&gt;
         103&lt;br /&gt;
         104&lt;br /&gt;
         105&lt;br /&gt;
         106&lt;br /&gt;
         107&lt;br /&gt;
         108&lt;br /&gt;
         109&lt;br /&gt;
         110&lt;br /&gt;
10 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Table function with aggregate function and group by==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,&lt;br /&gt;
  2                    ENAME VARCHAR2(10),&lt;br /&gt;
  3                    JOB VARCHAR2(9),&lt;br /&gt;
  4                    MGR NUMBER(4),&lt;br /&gt;
  5                    HIREDATE DATE,&lt;br /&gt;
  6                    SAL NUMBER(7, 2),&lt;br /&gt;
  7                    COMM NUMBER(7, 2),&lt;br /&gt;
  8                    DEPTNO NUMBER(2));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7369, &amp;quot;SMITH&amp;quot;, &amp;quot;CLERK&amp;quot;,    7902, TO_DATE(&amp;quot;17-DEC-1980&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 800, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7499, &amp;quot;ALLEN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698, TO_DATE(&amp;quot;20-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1600, 300, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7521, &amp;quot;WARD&amp;quot;,  &amp;quot;SALESMAN&amp;quot;, 7698, TO_DATE(&amp;quot;22-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 500, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7566, &amp;quot;JONES&amp;quot;, &amp;quot;MANAGER&amp;quot;,  7839, TO_DATE(&amp;quot;2-APR-1981&amp;quot;,  &amp;quot;DD-MON-YYYY&amp;quot;), 2975, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7654, &amp;quot;MARTIN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;28-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 1400, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7698, &amp;quot;BLAKE&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;1-MAY-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2850, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7782, &amp;quot;CLARK&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;9-JUN-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2450, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7788, &amp;quot;SCOTT&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;09-DEC-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7839, &amp;quot;KING&amp;quot;, &amp;quot;PRESIDENT&amp;quot;, NULL,TO_DATE(&amp;quot;17-NOV-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 5000, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7844, &amp;quot;TURNER&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;8-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1500, 0, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7876, &amp;quot;ADAMS&amp;quot;, &amp;quot;CLERK&amp;quot;, 7788,TO_DATE(&amp;quot;12-JAN-1983&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1100, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7900, &amp;quot;JAMES&amp;quot;, &amp;quot;CLERK&amp;quot;, 7698,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 950, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7902, &amp;quot;FORD&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7934, &amp;quot;MILLER&amp;quot;, &amp;quot;CLERK&amp;quot;, 7782,TO_DATE(&amp;quot;23-JAN-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1300, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (10, &amp;quot;ACCOUNTING&amp;quot;, &amp;quot;NEW YORK&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (20, &amp;quot;RESEARCH&amp;quot;, &amp;quot;DALLAS&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (30, &amp;quot;SALES&amp;quot;, &amp;quot;CHICAGO&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (40, &amp;quot;OPERATIONS&amp;quot;, &amp;quot;BOSTON&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type emp_type&lt;br /&gt;
  2  as object&lt;br /&gt;
  3  (empno       number(4),&lt;br /&gt;
  4   ename       varchar2(10),&lt;br /&gt;
  5   job         varchar2(9),&lt;br /&gt;
  6   mgr         number(4),&lt;br /&gt;
  7   hiredate    date,&lt;br /&gt;
  8   sal         number(7, 2),&lt;br /&gt;
  9   comm        number(7, 2)&lt;br /&gt;
 10  );&lt;br /&gt;
 11  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type emp_tab_type&lt;br /&gt;
  2  as table of emp_type&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type dept_type&lt;br /&gt;
  2  as object&lt;br /&gt;
  3  ( deptno number(2),&lt;br /&gt;
  4    dname  varchar2(14),&lt;br /&gt;
  5    loc    varchar2(13),&lt;br /&gt;
  6    emps   emp_tab_type&lt;br /&gt;
  7  )&lt;br /&gt;
  8  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace view dept_or&lt;br /&gt;
  2  of dept_type&lt;br /&gt;
  3  with object identifier(deptno)&lt;br /&gt;
  4  as&lt;br /&gt;
  5  select deptno, dname, loc,&lt;br /&gt;
  6         cast ( multiset (&lt;br /&gt;
  7                 select empno, ename, job, mgr, hiredate, sal, comm&lt;br /&gt;
  8                   from emp&lt;br /&gt;
  9                  where emp.deptno = dept.deptno )&lt;br /&gt;
 10                as emp_tab_type )&lt;br /&gt;
 11    from dept&lt;br /&gt;
 12  /&lt;br /&gt;
View created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select deptno, dname, loc, count(*)&lt;br /&gt;
  2    from dept_or d, table ( d.emps )&lt;br /&gt;
  3   group by deptno, dname, loc&lt;br /&gt;
  4  /&lt;br /&gt;
&lt;br /&gt;
    DEPTNO DNAME          LOC             COUNT(*)&lt;br /&gt;
---------- -------------- ------------- ----------&lt;br /&gt;
        20 RESEARCH       DALLAS                 5&lt;br /&gt;
        10 ACCOUNTING     NEW YORK               3&lt;br /&gt;
        30 SALES          CHICAGO                6&lt;br /&gt;
SQL&amp;gt; drop type dept_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type emp_tab_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type emp_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table dept;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Table function with varray column==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE numberVarryType AS VARRAY(10)OF NUMBER(10);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE address_list (&lt;br /&gt;
  2      list_id VARCHAR2(6)PRIMARY KEY,&lt;br /&gt;
  3      direct_addresses numberVarryType&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO address_list VALUES(&amp;quot;OFF101&amp;quot;,numberVarryType(1001,1002,1003,1004));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT list_id,column_value FROM address_list,TABLE(direct_addresses);&lt;br /&gt;
LIST_I COLUMN_VALUE&lt;br /&gt;
------ ------------&lt;br /&gt;
OFF101         1001&lt;br /&gt;
OFF101         1002&lt;br /&gt;
OFF101         1003&lt;br /&gt;
OFF101         1004&lt;br /&gt;
4 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table address_list;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Update statement with table function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,&lt;br /&gt;
  2                    ENAME VARCHAR2(10),&lt;br /&gt;
  3                    JOB VARCHAR2(9),&lt;br /&gt;
  4                    MGR NUMBER(4),&lt;br /&gt;
  5                    HIREDATE DATE,&lt;br /&gt;
  6                    SAL NUMBER(7, 2),&lt;br /&gt;
  7                    COMM NUMBER(7, 2),&lt;br /&gt;
  8                    DEPTNO NUMBER(2));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7369, &amp;quot;SMITH&amp;quot;, &amp;quot;CLERK&amp;quot;,    7902, TO_DATE(&amp;quot;17-DEC-1980&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 800, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7499, &amp;quot;ALLEN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698, TO_DATE(&amp;quot;20-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1600, 300, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7521, &amp;quot;WARD&amp;quot;,  &amp;quot;SALESMAN&amp;quot;, 7698, TO_DATE(&amp;quot;22-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 500, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7566, &amp;quot;JONES&amp;quot;, &amp;quot;MANAGER&amp;quot;,  7839, TO_DATE(&amp;quot;2-APR-1981&amp;quot;,  &amp;quot;DD-MON-YYYY&amp;quot;), 2975, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7654, &amp;quot;MARTIN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;28-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 1400, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7698, &amp;quot;BLAKE&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;1-MAY-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2850, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7782, &amp;quot;CLARK&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;9-JUN-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2450, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7788, &amp;quot;SCOTT&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;09-DEC-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7839, &amp;quot;KING&amp;quot;, &amp;quot;PRESIDENT&amp;quot;, NULL,TO_DATE(&amp;quot;17-NOV-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 5000, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7844, &amp;quot;TURNER&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;8-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1500, 0, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7876, &amp;quot;ADAMS&amp;quot;, &amp;quot;CLERK&amp;quot;, 7788,TO_DATE(&amp;quot;12-JAN-1983&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1100, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7900, &amp;quot;JAMES&amp;quot;, &amp;quot;CLERK&amp;quot;, 7698,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 950, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7902, &amp;quot;FORD&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7934, &amp;quot;MILLER&amp;quot;, &amp;quot;CLERK&amp;quot;, 7782,TO_DATE(&amp;quot;23-JAN-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1300, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (10, &amp;quot;ACCOUNTING&amp;quot;, &amp;quot;NEW YORK&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (20, &amp;quot;RESEARCH&amp;quot;, &amp;quot;DALLAS&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (30, &amp;quot;SALES&amp;quot;, &amp;quot;CHICAGO&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO DEPT VALUES (40, &amp;quot;OPERATIONS&amp;quot;, &amp;quot;BOSTON&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type emp_type&lt;br /&gt;
  2  as object&lt;br /&gt;
  3  (empno       number(4),&lt;br /&gt;
  4   ename       varchar2(10),&lt;br /&gt;
  5   job         varchar2(9),&lt;br /&gt;
  6   mgr         number(4),&lt;br /&gt;
  7   hiredate    date,&lt;br /&gt;
  8   sal         number(7, 2),&lt;br /&gt;
  9   comm        number(7, 2)&lt;br /&gt;
 10  );&lt;br /&gt;
 11  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; create or replace type emp_tab_type&lt;br /&gt;
  2  as table of emp_type&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; create or replace type dept_type&lt;br /&gt;
  2  as object&lt;br /&gt;
  3  ( deptno number(2),&lt;br /&gt;
  4    dname  varchar2(14),&lt;br /&gt;
  5    loc    varchar2(13),&lt;br /&gt;
  6    emps   emp_tab_type&lt;br /&gt;
  7  )&lt;br /&gt;
  8  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace view dept_or&lt;br /&gt;
  2  of dept_type&lt;br /&gt;
  3  with object identifier(deptno)&lt;br /&gt;
  4  as&lt;br /&gt;
  5  select deptno, dname, loc,&lt;br /&gt;
  6         cast ( multiset ( select empno, ename, job, mgr, hiredate, sal, comm&lt;br /&gt;
  7                   from emp&lt;br /&gt;
  8                  where emp.deptno = dept.deptno )&lt;br /&gt;
  9                as emp_tab_type )&lt;br /&gt;
 10    from dept&lt;br /&gt;
 11  /&lt;br /&gt;
View created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; update TABLE ( select p.emps from dept_or p where deptno = 20 ) set ename = lower(ename)&lt;br /&gt;
  2  /&lt;br /&gt;
update TABLE ( select p.emps from dept_or p where deptno = 20 ) set ename = lower(ename)&lt;br /&gt;
                                                                    *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-25015: cannot perform DML on this nested table view column&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type dept_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type emp_tab_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type emp_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table dept;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Use table function on varray type value==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; column numlist format a60&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table employees(&lt;br /&gt;
  2    empno      NUMBER(4)&lt;br /&gt;
  3  , ename      VARCHAR2(8)&lt;br /&gt;
  4  , init       VARCHAR2(5)&lt;br /&gt;
  5  , job        VARCHAR2(8)&lt;br /&gt;
  6  , mgr        NUMBER(4)&lt;br /&gt;
  7  , bdate      DATE&lt;br /&gt;
  8  , msal       NUMBER(6,2)&lt;br /&gt;
  9  , comm       NUMBER(6,2)&lt;br /&gt;
 10  , deptno     NUMBER(2) ) ;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employees values(1,&amp;quot;Jason&amp;quot;,  &amp;quot;N&amp;quot;,  &amp;quot;TRAINER&amp;quot;, 2,   date &amp;quot;1965-12-18&amp;quot;,  800 , NULL,  10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(2,&amp;quot;Jerry&amp;quot;,  &amp;quot;J&amp;quot;,  &amp;quot;SALESREP&amp;quot;,3,   date &amp;quot;1966-11-19&amp;quot;,  1600, 300,   10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(3,&amp;quot;Jord&amp;quot;,   &amp;quot;T&amp;quot; , &amp;quot;SALESREP&amp;quot;,4,   date &amp;quot;1967-10-21&amp;quot;,  1700, 500,   20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(4,&amp;quot;Mary&amp;quot;,   &amp;quot;J&amp;quot;,  &amp;quot;MANAGER&amp;quot;, 5,   date &amp;quot;1968-09-22&amp;quot;,  1800, NULL,  20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(5,&amp;quot;Joe&amp;quot;,    &amp;quot;P&amp;quot;,  &amp;quot;SALESREP&amp;quot;,6,   date &amp;quot;1969-08-23&amp;quot;,  1900, 1400,  30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(6,&amp;quot;Black&amp;quot;,  &amp;quot;R&amp;quot;,  &amp;quot;MANAGER&amp;quot;, 7,   date &amp;quot;1970-07-24&amp;quot;,  2000, NULL,  30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(7,&amp;quot;Red&amp;quot;,    &amp;quot;A&amp;quot;,  &amp;quot;MANAGER&amp;quot;, 8,   date &amp;quot;1971-06-25&amp;quot;,  2100, NULL,  40);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(8,&amp;quot;White&amp;quot;,  &amp;quot;S&amp;quot;,  &amp;quot;TRAINER&amp;quot;, 9,   date &amp;quot;1972-05-26&amp;quot;,  2200, NULL,  40);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(9,&amp;quot;Yellow&amp;quot;, &amp;quot;C&amp;quot;,  &amp;quot;DIRECTOR&amp;quot;,10,  date &amp;quot;1973-04-27&amp;quot;,  2300, NULL,  20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into employees values(10,&amp;quot;Pink&amp;quot;,  &amp;quot;J&amp;quot;,  &amp;quot;SALESREP&amp;quot;,null,date &amp;quot;1974-03-28&amp;quot;,  2400, 0,     30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table e&lt;br /&gt;
  2  as&lt;br /&gt;
  3  select empno, ename, init, mgr, deptno&lt;br /&gt;
  4  from   employees;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type numberVarray as varray(4) of varchar2(20);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; alter table e add (numlist numberVarray);&lt;br /&gt;
Table altered.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; describe e;&lt;br /&gt;
 Name                                      Null?    Type&lt;br /&gt;
 ----------------------------------------- -------- ----------------------------&lt;br /&gt;
 EMPNO                                              NUMBER(4)&lt;br /&gt;
 ENAME                                              VARCHAR2(8)&lt;br /&gt;
 INIT                                               VARCHAR2(5)&lt;br /&gt;
 MGR                                                NUMBER(4)&lt;br /&gt;
 DEPTNO                                             NUMBER(2)&lt;br /&gt;
 NUMLIST                                            NUMBERVARRAY&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; update e set numlist = numberVarray(&amp;quot;4231&amp;quot;,&amp;quot;06-12345678&amp;quot;);&lt;br /&gt;
10 rows updated.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; break on empno&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select empno, n.* from e, TABLE(e.numlist) n;&lt;br /&gt;
 EMPNO COLUMN_VALUE&lt;br /&gt;
------ --------------------&lt;br /&gt;
     1 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     2 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     3 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     4 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     5 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     6 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     7 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     8 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
     9 4231&lt;br /&gt;
       06-12345678&lt;br /&gt;
    10 4231&lt;br /&gt;
 EMPNO COLUMN_VALUE&lt;br /&gt;
------ --------------------&lt;br /&gt;
    10 06-12345678&lt;br /&gt;
20 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select empno, numlist from e;&lt;br /&gt;
ERROR:&lt;br /&gt;
OCI-22303: type &amp;quot;SYS&amp;quot;.&amp;quot;KOTAD&amp;quot; not found&lt;br /&gt;
OCI-21522: attempted to use an invalid connection in OCI (object mode only)&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table e;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table employees;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Use table function to convert table collection to a table==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table ord(&lt;br /&gt;
  2           order_no               integer          primary key&lt;br /&gt;
  3          ,empl_no                integer&lt;br /&gt;
  4          ,order_date             date not null&lt;br /&gt;
  5          ,total_order_price      number(7,2)&lt;br /&gt;
  6          ,deliver_date           date&lt;br /&gt;
  7          ,deliver_time           varchar2(7)&lt;br /&gt;
  8          ,payment_method         varchar2(2)&lt;br /&gt;
  9          ,emp_no                 number(3,0)&lt;br /&gt;
 10          ,deliver_name           varchar2(35)&lt;br /&gt;
 11          ,gift_message           varchar2(100)&lt;br /&gt;
 12  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no,empl_no,order_date,total_order_price,deliver_date,deliver_time,payment_method,emp_no,deliver_name,gift_message)&lt;br /&gt;
  2           values(1,1,&amp;quot;14-Feb-2002&amp;quot;, 23.00, &amp;quot;14-Feb-2002&amp;quot;, &amp;quot;12 noon&amp;quot;, &amp;quot;CA&amp;quot;,1, null, &amp;quot;Gift for wife&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time ,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(2,1,&amp;quot;14-Feb-2003&amp;quot;, 510.98, &amp;quot;14-feb-2003&amp;quot;, &amp;quot;5 pm&amp;quot;, &amp;quot;NY&amp;quot;,7, &amp;quot;Rose Ted&amp;quot;, &amp;quot;Happy Valentines Day to Mother&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(3, 2,&amp;quot;14-Feb-2004&amp;quot;, 315.99, &amp;quot;14-feb-2004&amp;quot;, &amp;quot;3 pm&amp;quot;, &amp;quot;VS&amp;quot;,2, &amp;quot;Ani Forest&amp;quot;, &amp;quot;Happy Valentines Day to Father&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(4, 2,&amp;quot;14-Feb-1999&amp;quot;, 191.95, &amp;quot;14-feb-1999&amp;quot;, &amp;quot;2 pm&amp;quot;, &amp;quot;NJ&amp;quot;,2, &amp;quot;O. John&amp;quot;, &amp;quot;Happy Valentines Day&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message    )&lt;br /&gt;
  2           values(5, 6,&amp;quot;4-mar-2002&amp;quot;, 101.95, &amp;quot;5-mar-2002&amp;quot;, &amp;quot;2:30 pm&amp;quot;, &amp;quot;MO&amp;quot;    , 2, &amp;quot;Cora&amp;quot;, &amp;quot;Happy Birthday from John&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(6, 9,&amp;quot;7-apr-2003&amp;quot;, 221.95, &amp;quot;7-apr-2003&amp;quot;, &amp;quot;3 pm&amp;quot;, &amp;quot;MA&amp;quot;, 2, &amp;quot;Sake Keith&amp;quot;, &amp;quot;Happy Birthday from Joe&amp;quot; );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(7, 9,&amp;quot;20-jun-2004&amp;quot;, 315.95, &amp;quot;21-jun-2004&amp;quot;, &amp;quot;12 noon&amp;quot;, &amp;quot;BC&amp;quot;, 2, &amp;quot;Jessica Li&amp;quot;, &amp;quot;Happy Birthday from Jessica&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values (8, 12, &amp;quot;31-dec-1999&amp;quot;, 135.95, &amp;quot;1-jan-2000&amp;quot;, &amp;quot;12 noon&amp;quot;, &amp;quot;DI&amp;quot;,   3, &amp;quot;Larry&amp;quot;, &amp;quot;Happy New Year from Lawrence&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values (9, 12, &amp;quot;26-dec-2003&amp;quot;, 715.95, &amp;quot;2-jan-2004&amp;quot;, &amp;quot;12 noon&amp;quot;, &amp;quot;SK&amp;quot;,7, &amp;quot;Did&amp;quot;, &amp;quot;Happy Birthday from Nancy&amp;quot; );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(10, 4, sysdate-1, 119.95, sysdate+2, &amp;quot;6:30 pm&amp;quot;, &amp;quot;VG&amp;quot;,2, &amp;quot;P. Jing&amp;quot;, &amp;quot;Happy Valentines Day to Jason&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message )&lt;br /&gt;
  2           values(11, 2, sysdate, 310.00, sysdate+2, &amp;quot;3:30 pm&amp;quot;, &amp;quot;DC&amp;quot;,2, &amp;quot;C. Late&amp;quot;, &amp;quot;Happy Birthday Day to Jack&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message)&lt;br /&gt;
  2           values(12, 7, sysdate-3, 121.95, sysdate-2, &amp;quot;1:30 pm&amp;quot;, &amp;quot;AC&amp;quot;,2, &amp;quot;W. Last&amp;quot;, &amp;quot;Happy Birthday Day to You&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into ord(order_no  ,empl_no ,order_date ,total_order_price ,deliver_date ,deliver_time,payment_method ,emp_no,deliver_name ,gift_message)&lt;br /&gt;
  2           values(13, 7, sysdate, 211.95, sysdate-4, &amp;quot;4:30 pm&amp;quot;, &amp;quot;CA&amp;quot;,2, &amp;quot;J. Bond&amp;quot;, &amp;quot;Thanks for hard working&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type sqlMONTH_TABLEtype as table of date;&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace function month_generator&lt;br /&gt;
  2     (p_num_months in number)&lt;br /&gt;
  3     RETURN sqlMONTH_TABLEtype&lt;br /&gt;
  4  AS&lt;br /&gt;
  5      month_table     sqlMONTH_TABLEtype := sqlMONTH_TABLEtype();&lt;br /&gt;
  6  BEGIN&lt;br /&gt;
  7&lt;br /&gt;
  8      for i in 1..p_num_months loop&lt;br /&gt;
  9          month_table.extend(1);&lt;br /&gt;
 10          month_table(i) := add_months(sysdate, -i);&lt;br /&gt;
 11      end loop;&lt;br /&gt;
 12      return(month_table);&lt;br /&gt;
 13&lt;br /&gt;
 14  END;&lt;br /&gt;
 15  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select to_Char(x.column_value, &amp;quot;mm/yyyy&amp;quot;) , nvl(avg(total_order_price),0) as avg_Sales&lt;br /&gt;
  2  from TABLE( month_generator(12) ) x, ord&lt;br /&gt;
  3  where to_Char(x.column_value, &amp;quot;mm/yyyy&amp;quot;) = to_Char(order_date(+), &amp;quot;mm/yyyy&amp;quot;)&lt;br /&gt;
  4  group by to_Char(x.column_value, &amp;quot;mm/yyyy&amp;quot;) ;&lt;br /&gt;
TO_CHAR  AVG_SALES&lt;br /&gt;
------- ----------&lt;br /&gt;
04/2008          0&lt;br /&gt;
03/2008          0&lt;br /&gt;
02/2008          0&lt;br /&gt;
10/2007          0&lt;br /&gt;
01/2008          0&lt;br /&gt;
05/2008          0&lt;br /&gt;
06/2008          0&lt;br /&gt;
12/2007          0&lt;br /&gt;
11/2007          0&lt;br /&gt;
07/2007          0&lt;br /&gt;
09/2007          0&lt;br /&gt;
TO_CHAR  AVG_SALES&lt;br /&gt;
------- ----------&lt;br /&gt;
08/2007          0&lt;br /&gt;
12 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table ord;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>