<?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%2FCursor%2FCursor_function</id>
		<title>Oracle PL/SQL Tutorial/Cursor/Cursor 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%2FCursor%2FCursor_function"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Cursor/Cursor_function&amp;action=history"/>
		<updated>2026-04-13T16:09:39Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Cursor/Cursor_function&amp;diff=3152&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/Cursor/Cursor_function&amp;diff=3152&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/Cursor/Cursor_function&amp;diff=3153&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/Cursor/Cursor_function&amp;diff=3153&amp;oldid=prev"/>
				<updated>2010-05-26T10:05:23Z</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;== A PL/SQL function that uses a cursor expression==&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 product(&lt;br /&gt;
  2     product_id number(4)     not null,&lt;br /&gt;
  3     product_description varchar2(20) not null&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into product values (1,&amp;quot;Java&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (2,&amp;quot;Oracle&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (3,&amp;quot;C#&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (4,&amp;quot;Javascript&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (5,&amp;quot;Python&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 table company(&lt;br /&gt;
  2     product_id        number(4)    not null,&lt;br /&gt;
  3     company_id          NUMBER(8)    not null,&lt;br /&gt;
  4     company_short_name  varchar2(30) not null,&lt;br /&gt;
  5     company_long_name   varchar2(60)&lt;br /&gt;
  6  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1001,&amp;quot;A Inc.&amp;quot;,&amp;quot;Long Name A Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1002,&amp;quot;B Inc.&amp;quot;,&amp;quot;Long Name B Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1003,&amp;quot;C Inc.&amp;quot;,&amp;quot;Long Name C Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1004,&amp;quot;D Inc.&amp;quot;,&amp;quot;Long Name D Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1005,&amp;quot;E Inc.&amp;quot;,&amp;quot;Long Name E Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1006,&amp;quot;F Inc.&amp;quot;,&amp;quot;Long Name F Inc.&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 function f_cursor_exp return NUMBER&lt;br /&gt;
  2  is&lt;br /&gt;
  3    TYPE rc is REF CURSOR;&lt;br /&gt;
  4&lt;br /&gt;
  5    CURSOR myCursor IS&lt;br /&gt;
  6      SELECT h.product_description,&lt;br /&gt;
  7        CURSOR(SELECT o.rupany_long_name&lt;br /&gt;
  8               FROM company o&lt;br /&gt;
  9               WHERE o.product_id =h.product_id)long_name&lt;br /&gt;
 10      FROM product h;&lt;br /&gt;
 11&lt;br /&gt;
 12    productRecord rc;&lt;br /&gt;
 13    v_product_description VARCHAR2(20);&lt;br /&gt;
 14    v_company_long_name VARCHAR2(60);&lt;br /&gt;
 15  BEGIN&lt;br /&gt;
 16&lt;br /&gt;
 17    OPEN myCursor;&lt;br /&gt;
 18    LOOP&lt;br /&gt;
 19      FETCH myCursor INTO v_product_description,productRecord;&lt;br /&gt;
 20      EXIT WHEN myCursor%notfound;&lt;br /&gt;
 21&lt;br /&gt;
 22      LOOP&lt;br /&gt;
 23        FETCH productRecord INTO v_company_long_name;&lt;br /&gt;
 24        EXIT WHEN productRecord%notfound;&lt;br /&gt;
 25        DBMS_OUTPUT.PUT_LINE(v_product_description ||&amp;quot;&amp;quot;||v_company_long_name);&lt;br /&gt;
 26      END LOOP;&lt;br /&gt;
 27    END LOOP;&lt;br /&gt;
 28&lt;br /&gt;
 29    close myCursor;&lt;br /&gt;
 30    RETURN (0);&lt;br /&gt;
 31  EXCEPTION WHEN OTHERS THEN&lt;br /&gt;
 32    RETURN (SQLCODE);&lt;br /&gt;
 33  END;&lt;br /&gt;
 34  /&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; drop table company;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table product;&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;
== Cursor expressions using multiple levels of nested cursors==&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 product(&lt;br /&gt;
  2     product_id number(4)     not null,&lt;br /&gt;
  3     product_description varchar2(20) not null&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into product values (1,&amp;quot;Java&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (2,&amp;quot;Oracle&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (3,&amp;quot;C#&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (4,&amp;quot;Javascript&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (5,&amp;quot;Python&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 table company(&lt;br /&gt;
  2     product_id        number(4)    not null,&lt;br /&gt;
  3     company_id          NUMBER(8)    not null,&lt;br /&gt;
  4     company_short_name  varchar2(30) not null,&lt;br /&gt;
  5     company_long_name   varchar2(60)&lt;br /&gt;
  6  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1001,&amp;quot;A Inc.&amp;quot;,&amp;quot;Long Name A Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1002,&amp;quot;B Inc.&amp;quot;,&amp;quot;Long Name B Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1003,&amp;quot;C Inc.&amp;quot;,&amp;quot;Long Name C Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1004,&amp;quot;D Inc.&amp;quot;,&amp;quot;Long Name D Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1005,&amp;quot;E Inc.&amp;quot;,&amp;quot;Long Name E Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1006,&amp;quot;F Inc.&amp;quot;,&amp;quot;Long Name F Inc.&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 table company_site(&lt;br /&gt;
  2     site_no number(4)       not null,&lt;br /&gt;
  3     site_descr varchar2(20) not null&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into company_site values (1,&amp;quot;New York&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company_site values (2,&amp;quot;Washington&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company_site values (3,&amp;quot;Chicago&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company_site values (4,&amp;quot;Dallas&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company_site values (5,&amp;quot;San Francisco&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 table org_company_site(&lt;br /&gt;
  2     company_id number(8) not null,&lt;br /&gt;
  3     site_no number(4) not null&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1001,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1002,2);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1003,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1004,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1004,2);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1004,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1005,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1005,4);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1005,5);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1006,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace function f_cursor_exp_complex return NUMBER&lt;br /&gt;
  2  is&lt;br /&gt;
  3    TYPE rc is REF CURSOR;&lt;br /&gt;
  4&lt;br /&gt;
  5    CURSOR myCursor IS&lt;br /&gt;
  6      SELECT h.product_description,&lt;br /&gt;
  7        CURSOR(SELECT o.rupany_long_name,&lt;br /&gt;
  8          CURSOR (SELECT s.site_descr&lt;br /&gt;
  9                  FROM org_company_site os,company_site s&lt;br /&gt;
 10                  WHERE os.site_no =s.site_no&lt;br /&gt;
 11                  AND os.rupany_id =o.rupany_id)as site_name&lt;br /&gt;
 12               FROM company o&lt;br /&gt;
 13               WHERE o.product_id =h.product_id)long_name&lt;br /&gt;
 14      FROM product h;&lt;br /&gt;
 15&lt;br /&gt;
 16    myRecord rc;&lt;br /&gt;
 17    company_rec rc;&lt;br /&gt;
 18    v_product_description VARCHAR2(20);&lt;br /&gt;
 19    v_company_long_name VARCHAR2(60);&lt;br /&gt;
 20    v_site_name VARCHAR2(20);&lt;br /&gt;
 21  BEGIN&lt;br /&gt;
 22&lt;br /&gt;
 23    OPEN myCursor;&lt;br /&gt;
 24    LOOP&lt;br /&gt;
 25&lt;br /&gt;
 26      FETCH myCursor INTO v_product_description,myRecord;&lt;br /&gt;
 27      EXIT WHEN myCursor%notfound;&lt;br /&gt;
 28      LOOP&lt;br /&gt;
 29&lt;br /&gt;
 30        FETCH myRecord INTO v_company_long_name,company_rec;&lt;br /&gt;
 31        EXIT WHEN myRecord%notfound;&lt;br /&gt;
 32        LOOP&lt;br /&gt;
 33          FETCH company_rec INTO v_site_name;&lt;br /&gt;
 34          EXIT WHEN company_rec%notfound;&lt;br /&gt;
 35          DBMS_OUTPUT.PUT_LINE(v_product_description ||&amp;quot;&amp;quot;||v_company_long_name||&amp;quot;&amp;quot;||v_site_name);&lt;br /&gt;
 36        END LOOP;&lt;br /&gt;
 37      END LOOP;&lt;br /&gt;
 38    END LOOP;&lt;br /&gt;
 39&lt;br /&gt;
 40    close myCursor;&lt;br /&gt;
 41    RETURN (0);&lt;br /&gt;
 42  EXCEPTION WHEN OTHERS THEN&lt;br /&gt;
 43    RETURN (SQLCODE);&lt;br /&gt;
 44  END;&lt;br /&gt;
 45  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table company;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table product;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table company_site;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table org_company_site;&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;
== Cursor 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;&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; 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; 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 table dept_fy_budget&lt;br /&gt;
  2  ( deptno   number(2) ,&lt;br /&gt;
  3    fy       date,&lt;br /&gt;
  4    amount   number,&lt;br /&gt;
  5    constraint dept_fy_budget_pk primary key(deptno,fy)&lt;br /&gt;
  6  )&lt;br /&gt;
  7  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into dept_fy_budget values( 10, to_date( &amp;quot;01-jan-1999&amp;quot; ), 500 );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into dept_fy_budget values( 10, to_date( &amp;quot;01-jan-2000&amp;quot; ), 750 );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into dept_fy_budget values( 10, to_date( &amp;quot;01-jan-2001&amp;quot; ), 1000 );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select&lt;br /&gt;
  2      dept.deptno, dept.dname,&lt;br /&gt;
  3      cursor(select empno from emp where deptno = dept.deptno),&lt;br /&gt;
  4      cursor(select fy, amount from dept_fy_budget where deptno = dept.deptno)&lt;br /&gt;
  5  from dept&lt;br /&gt;
  6  where deptno = 10&lt;br /&gt;
  7  /&lt;br /&gt;
&lt;br /&gt;
    DEPTNO DNAME          CURSOR(SELECTEMPNOFR CURSOR(SELECTFY,AMOU&lt;br /&gt;
---------- -------------- -------------------- --------------------&lt;br /&gt;
        10 ACCOUNTING     CURSOR STATEMENT : 3 CURSOR STATEMENT : 4&lt;br /&gt;
CURSOR STATEMENT : 3&lt;br /&gt;
drop table emp;&lt;br /&gt;
     EMPNO&lt;br /&gt;
----------&lt;br /&gt;
      7782&lt;br /&gt;
      7839&lt;br /&gt;
      7934&lt;br /&gt;
&lt;br /&gt;
CURSOR STATEMENT : 4&lt;br /&gt;
FY            AMOUNT&lt;br /&gt;
--------- ----------&lt;br /&gt;
01-JAN-99        500&lt;br /&gt;
01-JAN-00        750&lt;br /&gt;
01-JAN-01       1000&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; SP2-0042: unknown command &amp;quot;table emp&amp;quot; - rest of line ignored.&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; drop table dept_fy_budget;&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;
== Passing data from one table function to another in a pipelined fashion==&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 PACKAGE pkg_table_func&lt;br /&gt;
  2  IS&lt;br /&gt;
  3    TYPE address_rec IS RECORD&lt;br /&gt;
  4    (LINE1 VARCHAR2(20),&lt;br /&gt;
  5     LINE2 VARCHAR2(20),&lt;br /&gt;
  6     CITY VARCHAR2(20),&lt;br /&gt;
  7     STATE_CODE VARCHAR2(2),&lt;br /&gt;
  8     ZIP VARCHAR2(13),&lt;br /&gt;
  9     COUNTRY_CODE VARCHAR2(4));&lt;br /&gt;
 10&lt;br /&gt;
 11     TYPE temp_adds IS TABLE OF address_rec;&lt;br /&gt;
 12  END;&lt;br /&gt;
 13  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE FUNCTION myProc&lt;br /&gt;
  2  RETURN pkg_table_func.temp_adds&lt;br /&gt;
  3  PIPELINED&lt;br /&gt;
  4  IS&lt;br /&gt;
  5    addressValue pkg_table_func.address_rec;&lt;br /&gt;
  6  BEGIN&lt;br /&gt;
  7    FOR i IN 1..3 LOOP&lt;br /&gt;
  8      IF (i=1) THEN&lt;br /&gt;
  9        addressValue.line1 :=&amp;quot;20 Spring St.&amp;quot;;&lt;br /&gt;
 10        addressValue.line2 :=null;&lt;br /&gt;
 11        addressValue.city :=&amp;quot;New York&amp;quot;;&lt;br /&gt;
 12        addressValue.state_code :=&amp;quot;NY&amp;quot;;&lt;br /&gt;
 13        addressValue.zip :=&amp;quot;10020&amp;quot;;&lt;br /&gt;
 14        addressValue.country_code :=&amp;quot;USA&amp;quot;;&lt;br /&gt;
 15      ELSIF (i=2) THEN&lt;br /&gt;
 16        addressValue.line1 :=&amp;quot;Suite 206&amp;quot;;&lt;br /&gt;
 17        addressValue.line2 :=&amp;quot;P Blvd&amp;quot;;&lt;br /&gt;
 18        addressValue.city :=&amp;quot;B&amp;quot;;&lt;br /&gt;
 19        addressValue.state_code :=&amp;quot;IL&amp;quot;;&lt;br /&gt;
 20        addressValue.zip :=&amp;quot;60000&amp;quot;;&lt;br /&gt;
 21        addressValue.country_code :=&amp;quot;USA&amp;quot;;&lt;br /&gt;
 22      ELSIF (i=3) THEN&lt;br /&gt;
 23        addressValue.line1 :=&amp;quot;1  Dr.&amp;quot;;&lt;br /&gt;
 24        addressValue.line2 :=null;&lt;br /&gt;
 25        addressValue.city :=&amp;quot;Vancouver&amp;quot;;&lt;br /&gt;
 26        addressValue.state_code :=&amp;quot;NJ&amp;quot;;&lt;br /&gt;
 27        addressValue.zip :=&amp;quot;22222&amp;quot;;&lt;br /&gt;
 28        addressValue.country_code :=&amp;quot;USA&amp;quot;;&lt;br /&gt;
 29      END IF;&lt;br /&gt;
 30      PIPE ROW(addressValue);&lt;br /&gt;
 31    END LOOP;&lt;br /&gt;
 32    RETURN;&lt;br /&gt;
 33  END;&lt;br /&gt;
 34  /&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; CREATE OR REPLACE FUNCTION f_table_plsql2_pipelined(p_ref_cursor SYS_REFCURSOR)&lt;br /&gt;
  2  RETURN pkg_table_func.temp_adds PIPELINED&lt;br /&gt;
  3  IS&lt;br /&gt;
  4    addressValue1 pkg_table_func.address_rec;&lt;br /&gt;
  5    addressValue2 pkg_table_func.address_rec;&lt;br /&gt;
  6  BEGIN&lt;br /&gt;
  7    LOOP&lt;br /&gt;
  8      FETCH p_ref_cursor INTO addressValue1;&lt;br /&gt;
  9      EXIT WHEN p_ref_cursor%NOTFOUND;&lt;br /&gt;
 10      IF (addressValue1.city=&amp;quot;New York&amp;quot;) THEN&lt;br /&gt;
 11        addressValue2.line1 :=&amp;quot;P.O.Box 2215&amp;quot;;&lt;br /&gt;
 12        addressValue2.line2 :=null;&lt;br /&gt;
 13        addressValue2.city :=&amp;quot;New York&amp;quot;;&lt;br /&gt;
 14        addressValue2.state_code :=&amp;quot;NY&amp;quot;;&lt;br /&gt;
 15        addressValue2.zip :=&amp;quot;10020-2215&amp;quot;;&lt;br /&gt;
 16        addressValue2.country_code :=&amp;quot;USA&amp;quot;;&lt;br /&gt;
 17      ELSIF (addressValue1.city=&amp;quot;Bloomington&amp;quot;) THEN&lt;br /&gt;
 18        addressValue2.line1 :=&amp;quot;P.O.Box 6615&amp;quot;;&lt;br /&gt;
 19        addressValue2.line2 :=null;&lt;br /&gt;
 20        addressValue2.city :=&amp;quot;Bloomington&amp;quot;;&lt;br /&gt;
 21        addressValue2.state_code :=&amp;quot;IL&amp;quot;;&lt;br /&gt;
 22        addressValue2.zip :=&amp;quot;60610-6615&amp;quot;;&lt;br /&gt;
 23        addressValue2.country_code :=&amp;quot;USA&amp;quot;;&lt;br /&gt;
 24      ELSIF (addressValue1.city=&amp;quot;Vancouver&amp;quot;) THEN&lt;br /&gt;
 25        addressValue2.line1 :=&amp;quot;P.O.Box 0001&amp;quot;;&lt;br /&gt;
 26        addressValue2.line2 :=null;&lt;br /&gt;
 27        addressValue2.city :=&amp;quot;Vancouver&amp;quot;;&lt;br /&gt;
 28        addressValue2.state_code :=&amp;quot;NJ&amp;quot;;&lt;br /&gt;
 29        addressValue2.zip :=&amp;quot;08540&amp;quot;;&lt;br /&gt;
 30        addressValue2.country_code :=&amp;quot;USA&amp;quot;;&lt;br /&gt;
 31      END IF;&lt;br /&gt;
 32      PIPE ROW(addressValue2);&lt;br /&gt;
 33    END LOOP;&lt;br /&gt;
 34    close p_ref_cursor;&lt;br /&gt;
 35    RETURN;&lt;br /&gt;
 36  END;&lt;br /&gt;
 37  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM TABLE(f_table_plsql2_pipelined(&lt;br /&gt;
  2                     CURSOR(SELECT * FROM TABLE(myProc()))));&lt;br /&gt;
LINE1                LINE2                CITY                 ST&lt;br /&gt;
-------------------- -------------------- -------------------- --&lt;br /&gt;
ZIP           COUN&lt;br /&gt;
------------- ----&lt;br /&gt;
P.O.Box 2215         null                 New York             NY&lt;br /&gt;
10020-2215    USA&lt;br /&gt;
P.O.Box 2215         null                 New York             NY&lt;br /&gt;
10020-2215    USA&lt;br /&gt;
P.O.Box 0001         null                 Vancouver            NJ&lt;br /&gt;
08540         USA&lt;br /&gt;
&lt;br /&gt;
3 rows selected.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== SYS_REFCURSOR as parameter==&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 product(&lt;br /&gt;
  2     product_id number(4)     not null,&lt;br /&gt;
  3     product_description varchar2(20) not null&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into product values (1,&amp;quot;Java&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (2,&amp;quot;Oracle&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (3,&amp;quot;C#&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (4,&amp;quot;Javascript&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into product values (5,&amp;quot;Python&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 table company(&lt;br /&gt;
  2     product_id        number(4)    not null,&lt;br /&gt;
  3     company_id          NUMBER(8)    not null,&lt;br /&gt;
  4     company_short_name  varchar2(30) not null,&lt;br /&gt;
  5     company_long_name   varchar2(60)&lt;br /&gt;
  6  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1001,&amp;quot;A Inc.&amp;quot;,&amp;quot;Long Name A Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1002,&amp;quot;B Inc.&amp;quot;,&amp;quot;Long Name B Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(1,1003,&amp;quot;C Inc.&amp;quot;,&amp;quot;Long Name C Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1004,&amp;quot;D Inc.&amp;quot;,&amp;quot;Long Name D Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1005,&amp;quot;E Inc.&amp;quot;,&amp;quot;Long Name E Inc.&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into company values(2,1006,&amp;quot;F Inc.&amp;quot;,&amp;quot;Long Name F Inc.&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 table org_company_site(&lt;br /&gt;
  2     company_id number(8) not null,&lt;br /&gt;
  3     site_no number(4) not null&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1001,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1002,2);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1003,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1004,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1004,2);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1004,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1005,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1005,4);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1005,5);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into org_company_site values (1006,1);&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 FUNCTION f_cursor(p_cursor SYS_REFCURSOR)&lt;br /&gt;
  2  RETURN NUMBER&lt;br /&gt;
  3  IS&lt;br /&gt;
  4    v_company_short_name VARCHAR2(30);&lt;br /&gt;
  5    v_cnt NUMBER :=0;&lt;br /&gt;
  6    v_ret_code NUMBER;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    BEGIN&lt;br /&gt;
  9      LOOP&lt;br /&gt;
 10        FETCH p_cursor INTO v_company_short_name;&lt;br /&gt;
 11        EXIT WHEN p_cursor%NOTFOUND;&lt;br /&gt;
 12        v_cnt :=v_cnt +1;&lt;br /&gt;
 13      END LOOP;&lt;br /&gt;
 14      IF (v_cnt &amp;gt;0)THEN&lt;br /&gt;
 15        v_ret_code :=1;&lt;br /&gt;
 16      ELSE&lt;br /&gt;
 17        v_ret_code :=0;&lt;br /&gt;
 18      END IF;&lt;br /&gt;
 19    EXCEPTION WHEN OTHERS THEN&lt;br /&gt;
 20      v_ret_code :=SQLCODE;&lt;br /&gt;
 21    END;&lt;br /&gt;
 22    RETURN (v_ret_code);&lt;br /&gt;
 23  END;&lt;br /&gt;
 24  /&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 rpad(h.product_description,20,&amp;quot; &amp;quot;) &amp;quot;Hierarchy&amp;quot;,&lt;br /&gt;
  2         rpad(o.rupany_short_name,30,&amp;quot; &amp;quot;) &amp;quot;Organization&amp;quot;&lt;br /&gt;
  3  FROM product h,company o&lt;br /&gt;
  4  WHERE h.product_id =o.product_id&lt;br /&gt;
  5  AND f_cursor(&lt;br /&gt;
  6        CURSOR(SELECT o1.rupany_short_name&lt;br /&gt;
  7               FROM company o1&lt;br /&gt;
  8               WHERE o1.rupany_id =o.rupany_id&lt;br /&gt;
  9               AND 1 &amp;lt; (SELECT count(os.site_no)&lt;br /&gt;
 10                        FROM org_company_site os&lt;br /&gt;
 11                        WHERE os.rupany_id =o1.rupany_id)&lt;br /&gt;
 12              )&lt;br /&gt;
 13  )=1;&lt;br /&gt;
Hierarchy            Organization&lt;br /&gt;
-------------------- ------------------------------&lt;br /&gt;
Oracle               D Inc.&lt;br /&gt;
Oracle               E Inc.&lt;br /&gt;
2 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table company;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table product;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table org_company_site;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>