<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FFunction_Procedure_Packages%2FPackage_Variables</id>
		<title>Oracle PL/SQL Tutorial/Function Procedure Packages/Package Variables - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FFunction_Procedure_Packages%2FPackage_Variables"/>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Package_Variables&amp;action=history"/>
		<updated>2026-05-24T20:35:38Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Package_Variables&amp;diff=4402&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Package_Variables&amp;diff=4402&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://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Package_Variables&amp;diff=4403&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Package_Variables&amp;diff=4403&amp;oldid=prev"/>
				<updated>2010-05-26T10:11:48Z</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;== Cursor variable in a package==&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 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;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE myPackage&lt;br /&gt;
  2  IS&lt;br /&gt;
  3    PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4    CURSOR cursor_site IS&lt;br /&gt;
  5      SELECT * from company_site ORDER BY site_no;&lt;br /&gt;
  6    PROCEDURE displaySites;&lt;br /&gt;
  7  END myPackage;&lt;br /&gt;
  8  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY myPackage&lt;br /&gt;
  2  IS&lt;br /&gt;
  3    PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4    PROCEDURE displaySites&lt;br /&gt;
  5    IS&lt;br /&gt;
  6      site_rec company_site%ROWTYPE;&lt;br /&gt;
  7    BEGIN&lt;br /&gt;
  8      OPEN cursor_site;&lt;br /&gt;
  9      FETCH cursor_site INTO site_rec;&lt;br /&gt;
 10      dbms_output.put_line(TO_CHAR(site_rec.site_no)||&amp;quot; &amp;quot;||site_rec.site_descr);&lt;br /&gt;
 11      FETCH cursor_site INTO site_rec;&lt;br /&gt;
 12      dbms_output.put_line(TO_CHAR(site_rec.site_no)||&amp;quot; &amp;quot;||site_rec.site_descr);&lt;br /&gt;
 13    END displaySites;&lt;br /&gt;
 14  END myPackage;&lt;br /&gt;
 15  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt; BEGIN&lt;br /&gt;
  2    myPackage.displaySites;&lt;br /&gt;
  3  END;&lt;br /&gt;
  4  /&lt;br /&gt;
1 New York&lt;br /&gt;
2 Washington&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table company_site;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Define constant in a package==&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 employee&lt;br /&gt;
  2  (employee_id         NUMBER(7),&lt;br /&gt;
  3   last_name           VARCHAR2(25),&lt;br /&gt;
  4   first_name          VARCHAR2(25),&lt;br /&gt;
  5   userid              VARCHAR2(8),&lt;br /&gt;
  6   start_date          DATE,&lt;br /&gt;
  7   comments            VARCHAR2(255),&lt;br /&gt;
  8   manager_id          NUMBER(7),&lt;br /&gt;
  9   title               VARCHAR2(25),&lt;br /&gt;
 10   department_id       NUMBER(7),&lt;br /&gt;
 11   salary              NUMBER(11, 2),&lt;br /&gt;
 12   commission_pct      NUMBER(4, 2)&lt;br /&gt;
 13  );&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 PACKAGE empinfo&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     bysal CONSTANT INTEGER := 1;&lt;br /&gt;
  4     bysaldesc CONSTANT INTEGER := 2;&lt;br /&gt;
  5     bydept CONSTANT INTEGER := 3;&lt;br /&gt;
  6     byname CONSTANT INTEGER := 4;&lt;br /&gt;
  7     TYPE two_pieces_t IS RECORD (str VARCHAR2(100), num NUMBER);&lt;br /&gt;
  8     TYPE emp_cvt IS REF CURSOR RETURN two_pieces_t;&lt;br /&gt;
  9     FUNCTION open (query_number IN INTEGER) RETURN emp_cvt;&lt;br /&gt;
 10     PROCEDURE show (query_number IN INTEGER);&lt;br /&gt;
 11  END;&lt;br /&gt;
 12  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY empinfo&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     FUNCTION open (query_number IN INTEGER) RETURN emp_cvt&lt;br /&gt;
  4     IS&lt;br /&gt;
  5        retval emp_cvt;&lt;br /&gt;
  6     BEGIN&lt;br /&gt;
  7        IF query_number = bysal&lt;br /&gt;
  8        THEN&lt;br /&gt;
  9           OPEN retval FOR&lt;br /&gt;
 10              SELECT last_name, salary FROM employee ORDER BY salary;&lt;br /&gt;
 11        ELSIF query_number = bysaldesc&lt;br /&gt;
 12        THEN&lt;br /&gt;
 13           OPEN retval FOR&lt;br /&gt;
 14              SELECT last_name, salary FROM employee ORDER BY salary DESC;&lt;br /&gt;
 15        ELSIF query_number = bydept&lt;br /&gt;
 16        THEN&lt;br /&gt;
 17           OPEN retval FOR&lt;br /&gt;
 18              SELECT last_name, department_id FROM employee ORDER BY department_id;&lt;br /&gt;
 19        ELSIF query_number = byname&lt;br /&gt;
 20        THEN&lt;br /&gt;
 21           OPEN retval FOR&lt;br /&gt;
 22              SELECT first_name || &amp;quot; &amp;quot; || last_name, salary&lt;br /&gt;
 23                FROM employee ORDER BY last_name;&lt;br /&gt;
 24        END IF;&lt;br /&gt;
 25        RETURN retval;&lt;br /&gt;
 26     END;&lt;br /&gt;
 27&lt;br /&gt;
 28     PROCEDURE show (query_number IN INTEGER)&lt;br /&gt;
 29     IS&lt;br /&gt;
 30        cv emp_cvt;&lt;br /&gt;
 31        rec cv%ROWTYPE;&lt;br /&gt;
 32     BEGIN&lt;br /&gt;
 33        cv := open (query_number);&lt;br /&gt;
 34        LOOP&lt;br /&gt;
 35           FETCH cv INTO rec;&lt;br /&gt;
 36           EXIT WHEN cv%NOTFOUND;&lt;br /&gt;
 37           IF cv%ROWCOUNT = 1&lt;br /&gt;
 38           THEN&lt;br /&gt;
 39              DBMS_OUTPUT.PUT_LINE (RPAD (&amp;quot;-&amp;quot;, 60, &amp;quot;-&amp;quot;));&lt;br /&gt;
 40              DBMS_OUTPUT.PUT_LINE (&amp;quot;Contents of Query &amp;quot; || query_number);&lt;br /&gt;
 41              DBMS_OUTPUT.PUT_LINE (RPAD (&amp;quot;-&amp;quot;, 60, &amp;quot;-&amp;quot;));&lt;br /&gt;
 42           END IF;&lt;br /&gt;
 43           DBMS_OUTPUT.PUT_LINE (RPAD (rec.str, 30) || rec.num);&lt;br /&gt;
 44        END LOOP;&lt;br /&gt;
 45        CLOSE cv;&lt;br /&gt;
 46     END;&lt;br /&gt;
 47&lt;br /&gt;
 48  END;&lt;br /&gt;
 49  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt; drop table employee;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Demonstrate using a packaged ref cursor for passing sets==&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 employee&lt;br /&gt;
  2          (&lt;br /&gt;
  3           empl_no                integer         primary key&lt;br /&gt;
  4          ,lastname               varchar2(20)    not null&lt;br /&gt;
  5          ,firstname              varchar2(15)    not null&lt;br /&gt;
  6          ,midinit                varchar2(1)&lt;br /&gt;
  7          ,street                 varchar2(30)&lt;br /&gt;
  8          ,city                   varchar2(20)&lt;br /&gt;
  9          ,state                  varchar2(2)&lt;br /&gt;
 10          ,zip                    varchar2(5)&lt;br /&gt;
 11          ,zip_4                  varchar2(4)&lt;br /&gt;
 12          ,area_code              varchar2(3)&lt;br /&gt;
 13          ,phone                  varchar2(8)&lt;br /&gt;
 14          ,company_name           varchar2(50));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(1,&amp;quot;Jones&amp;quot;,&amp;quot;Joe&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;10 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;11111&amp;quot;,&amp;quot;1111&amp;quot;,&amp;quot;111&amp;quot;, &amp;quot;111-1111&amp;quot;,&amp;quot;A Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(2,&amp;quot;Smith&amp;quot;,&amp;quot;Sue&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;20 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;22222&amp;quot;,&amp;quot;2222&amp;quot;,&amp;quot;222&amp;quot;, &amp;quot;222-111&amp;quot;,&amp;quot;B Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(3,&amp;quot;Anderson&amp;quot;,&amp;quot;Peggy&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;500 St&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;33333&amp;quot;,&amp;quot;3333&amp;quot;,&amp;quot;333&amp;quot;, &amp;quot;333-3333&amp;quot;,&amp;quot;C Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(4,&amp;quot;Andy&amp;quot;,&amp;quot;Jill&amp;quot;, null,&amp;quot;930 St&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;44444&amp;quot;,&amp;quot;4444&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;634-7733&amp;quot;,&amp;quot;D Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(5,&amp;quot;OK&amp;quot;,&amp;quot;Carl&amp;quot;,&amp;quot;L&amp;quot;,&amp;quot;19 Drive&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;55555&amp;quot;,&amp;quot;3234&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;243-4243&amp;quot;,&amp;quot;E Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(6,&amp;quot;Peter&amp;quot;,&amp;quot;Jee&amp;quot;,&amp;quot;Q&amp;quot;,&amp;quot;38 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;66666&amp;quot;,&amp;quot;4598&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;454-5443&amp;quot;,&amp;quot;F Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(7,&amp;quot;Baker&amp;quot;,&amp;quot;Paul&amp;quot;,&amp;quot;V&amp;quot;,&amp;quot;738 St.&amp;quot;,&amp;quot;Queens&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;77777&amp;quot;,&amp;quot;3842&amp;quot;,&amp;quot;718&amp;quot;, &amp;quot;664-4333&amp;quot;,&amp;quot;G Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(8,&amp;quot;Young&amp;quot;,&amp;quot;Steve&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;388 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;88888&amp;quot;,&amp;quot;3468&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;456-4566&amp;quot;,&amp;quot;H Associates Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(9,&amp;quot;Mona&amp;quot;,&amp;quot;Joe&amp;quot;,&amp;quot;T&amp;quot;,&amp;quot;9300 Ave&amp;quot;,&amp;quot;Kansas City&amp;quot;,&amp;quot;MO&amp;quot;,&amp;quot;99999&amp;quot;,&amp;quot;3658&amp;quot;,&amp;quot;415&amp;quot;, &amp;quot;456-4563&amp;quot;,&amp;quot;J Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(10,&amp;quot;Hackett&amp;quot;,&amp;quot;Karen&amp;quot;,&amp;quot;S&amp;quot;,&amp;quot;Kings Rd. Apt 833&amp;quot;,&amp;quot;Bellmore&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;61202&amp;quot;,&amp;quot;3898&amp;quot;,&amp;quot;516&amp;quot;, &amp;quot;767-5677&amp;quot;,&amp;quot;AA Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(11,&amp;quot;Bob&amp;quot;,&amp;quot;Jack&amp;quot;,&amp;quot;S&amp;quot;,&amp;quot;12 Giant Rd.&amp;quot;,&amp;quot;Newark&amp;quot;,&amp;quot;NJ&amp;quot;,&amp;quot;27377&amp;quot;,&amp;quot;3298&amp;quot;,&amp;quot;908&amp;quot;, &amp;quot;123-7367&amp;quot;,&amp;quot;Z Associates&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;&lt;br /&gt;
SQL&amp;gt; create or replace package mytypes&lt;br /&gt;
  2  as&lt;br /&gt;
  3     type g_rc is ref cursor;&lt;br /&gt;
  4  end;&lt;br /&gt;
  5  /&lt;br /&gt;
Package 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; create or replace procedure cust_names&lt;br /&gt;
  2  (p_rc out mytypes.g_rc)&lt;br /&gt;
  3  as&lt;br /&gt;
  4  begin&lt;br /&gt;
  5    open p_rc for &amp;quot;select firstname, lastname&lt;br /&gt;
  6                   from employee&amp;quot;;&lt;br /&gt;
  7  end;&lt;br /&gt;
  8  /&lt;br /&gt;
Procedure 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; var temp refcursor&lt;br /&gt;
SQL&amp;gt; exec cust_names(:temp)&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt; print temp&lt;br /&gt;
FIRSTNAME       LASTNAME&lt;br /&gt;
--------------- --------------------&lt;br /&gt;
Joe             Jones&lt;br /&gt;
Sue             Smith&lt;br /&gt;
Peggy           Anderson&lt;br /&gt;
Jill            Andy&lt;br /&gt;
Carl            OK&lt;br /&gt;
Jee             Peter&lt;br /&gt;
Paul            Baker&lt;br /&gt;
Steve           Young&lt;br /&gt;
Joe             Mona&lt;br /&gt;
Karen           Hackett&lt;br /&gt;
Jack            Bob&lt;br /&gt;
11 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table employee;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&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;
== Package constant variable==&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 cc_debug&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     debug_active CONSTANT BOOLEAN := TRUE;&lt;br /&gt;
  4&lt;br /&gt;
  5     trace_level CONSTANT PLS_INTEGER := 10;&lt;br /&gt;
  6&lt;br /&gt;
  7  END cc_debug;&lt;br /&gt;
  8  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Package level cursor variable==&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 employee (&lt;br /&gt;
  2   employee_id NUMBER(38,0)&lt;br /&gt;
  3  ,deptno NUMBER(3,0) NOT NULL&lt;br /&gt;
  4  ,first_name  VARCHAR2(95) NOT NULL&lt;br /&gt;
  5  ,last_name   VARCHAR2(95) NOT NULL&lt;br /&gt;
  6  ,salary NUMBER(11,2)&lt;br /&gt;
  7  );&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 PACKAGE onecur&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     CURSOR onerow (employee_id_in IN employee.employee_id%TYPE) IS&lt;br /&gt;
  4        SELECT * FROM employee WHERE employee_id = employee_id_in;&lt;br /&gt;
  5&lt;br /&gt;
  6     PROCEDURE open_onerow(employee_id_in IN employee.employee_id%TYPE,close_if_open IN BOOLEAN := TRUE);&lt;br /&gt;
  7     PROCEDURE close_onerow;&lt;br /&gt;
  8  END onecur;&lt;br /&gt;
  9  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY onecur IS&lt;br /&gt;
  2     PROCEDURE open_onerow (employee_id_in IN employee.employee_id%TYPE,close_if_open IN BOOLEAN := TRUE)&lt;br /&gt;
  3     IS&lt;br /&gt;
  4        v_close BOOLEAN := NVL (close_if_open, TRUE);&lt;br /&gt;
  5        v_open BOOLEAN := TRUE;&lt;br /&gt;
  6     BEGIN&lt;br /&gt;
  7        IF onerow%ISOPEN AND v_close&lt;br /&gt;
  8        THEN&lt;br /&gt;
  9           CLOSE onerow;&lt;br /&gt;
 10        ELSIF onerow%ISOPEN AND NOT v_close&lt;br /&gt;
 11        THEN&lt;br /&gt;
 12           v_open := FALSE;&lt;br /&gt;
 13        END IF;&lt;br /&gt;
 14        IF v_open THEN&lt;br /&gt;
 15           OPEN onerow (employee_id_in);&lt;br /&gt;
 16        END IF;&lt;br /&gt;
 17     END;&lt;br /&gt;
 18&lt;br /&gt;
 19     PROCEDURE close_onerow IS&lt;br /&gt;
 20     BEGIN&lt;br /&gt;
 21        IF onerow%ISOPEN&lt;br /&gt;
 22        THEN&lt;br /&gt;
 23           CLOSE onerow;&lt;br /&gt;
 24        END IF;&lt;br /&gt;
 25     END;&lt;br /&gt;
 26  END onecur;&lt;br /&gt;
 27  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table employee;&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;
== Pre-filled table collection of varchars in a package==&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 strings_nt IS TABLE OF VARCHAR2(100);&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; CREATE OR REPLACE PACKAGE employees_pkg&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     vancouver_employees strings_nt := strings_nt (&amp;quot;R&amp;quot;, &amp;quot;H&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;C&amp;quot;);&lt;br /&gt;
  4     newyork_employees   strings_nt := strings_nt (&amp;quot;H&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;A&amp;quot;);&lt;br /&gt;
  5     boston_employees    strings_nt := strings_nt (&amp;quot;S&amp;quot;, &amp;quot;D&amp;quot;);&lt;br /&gt;
  6&lt;br /&gt;
  7     PROCEDURE show_employees (title_in IN VARCHAR2, employees_in IN strings_nt&lt;br /&gt;
  8     );&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; SHO ERR&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY employees_pkg&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     PROCEDURE show_employees (title_in IN VARCHAR2,employees_in IN strings_nt)&lt;br /&gt;
  4     IS&lt;br /&gt;
  5     BEGIN&lt;br /&gt;
  6        DBMS_OUTPUT.put_line (title_in);&lt;br /&gt;
  7&lt;br /&gt;
  8        FOR indx IN employees_in.FIRST .. employees_in.LAST&lt;br /&gt;
  9        LOOP&lt;br /&gt;
 10           DBMS_OUTPUT.put_line (indx || &amp;quot; = &amp;quot; || employees_in (indx));&lt;br /&gt;
 11        END LOOP;&lt;br /&gt;
 12&lt;br /&gt;
 13     END show_employees;&lt;br /&gt;
 14  END;&lt;br /&gt;
 15  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt; SHOw error&lt;br /&gt;
No errors.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Private field==&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 valerr&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     FUNCTION get RETURN VARCHAR2;&lt;br /&gt;
  4  END valerr;&lt;br /&gt;
  5  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY valerr&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     v VARCHAR2(1);&lt;br /&gt;
  4&lt;br /&gt;
  5     FUNCTION get RETURN VARCHAR2  -- Added Line&lt;br /&gt;
  6     IS&lt;br /&gt;
  7     BEGIN&lt;br /&gt;
  8        RETURN v;&lt;br /&gt;
  9     END;&lt;br /&gt;
 10  BEGIN&lt;br /&gt;
 11     v := &amp;quot;ABC&amp;quot;;&lt;br /&gt;
 12&lt;br /&gt;
 13  EXCEPTION&lt;br /&gt;
 14    WHEN OTHERS&lt;br /&gt;
 15    THEN&lt;br /&gt;
 16      DBMS_OUTPUT.PUT_LINE (&amp;quot;Error initializing valerr:&amp;quot;);&lt;br /&gt;
 17      DBMS_OUTPUT.PUT_LINE (SQLERRM);&lt;br /&gt;
 18&lt;br /&gt;
 19  END valerr;&lt;br /&gt;
 20  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&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;
== Serially Reusable Packages==&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 PACKAGE myPackage&lt;br /&gt;
  2  IS&lt;br /&gt;
  3    PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4    num_var NUMBER;&lt;br /&gt;
  5    char_var VARCHAR2(20);&lt;br /&gt;
  6    PROCEDURE initialize;&lt;br /&gt;
  7    FUNCTION display_num RETURN NUMBER;&lt;br /&gt;
  8    FUNCTION display_char RETURN VARCHAR2;&lt;br /&gt;
  9  END myPackage;&lt;br /&gt;
 10  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY myPackage&lt;br /&gt;
  2  IS&lt;br /&gt;
  3    PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4    PROCEDURE initialize&lt;br /&gt;
  5    IS&lt;br /&gt;
  6    BEGIN&lt;br /&gt;
  7      num_var :=100;&lt;br /&gt;
  8      char_var :=&amp;quot;Test String1&amp;quot;;&lt;br /&gt;
  9    END;&lt;br /&gt;
 10    FUNCTION display_num RETURN NUMBER&lt;br /&gt;
 11    IS&lt;br /&gt;
 12    BEGIN&lt;br /&gt;
 13      RETURN (num_var);&lt;br /&gt;
 14    END;&lt;br /&gt;
 15    FUNCTION display_char RETURN VARCHAR2&lt;br /&gt;
 16    IS&lt;br /&gt;
 17    BEGIN&lt;br /&gt;
 18      RETURN (char_var);&lt;br /&gt;
 19    END;&lt;br /&gt;
 20  END myPackage;&lt;br /&gt;
 21  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_num NUMBER;&lt;br /&gt;
  3    v_char VARCHAR2(20);&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    myPackage.initialize;&lt;br /&gt;
  6    v_num :=myPackage.display_num;&lt;br /&gt;
  7    v_char :=myPackage.display_char;&lt;br /&gt;
  8    dbms_output.put_line(TO_CHAR(v_num)||&amp;quot; &amp;quot;||v_char);&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&lt;br /&gt;
100 Test String1&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Test unit for package scopes==&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 package SCOPES as&lt;br /&gt;
  2  gv_scope                              varchar2(80) :=&lt;br /&gt;
  3    &amp;quot;I&amp;quot;&amp;quot;m a global (or package spec) variable&amp;quot;;&lt;br /&gt;
  4&lt;br /&gt;
  5  FUNCTION my_scope_is_global&lt;br /&gt;
  6  return                                varchar2;&lt;br /&gt;
  7&lt;br /&gt;
  8  PROCEDURE my_scope_is_global;&lt;br /&gt;
  9&lt;br /&gt;
 10  end SCOPES;&lt;br /&gt;
 11  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace package body SCOPES as&lt;br /&gt;
  2  iv_scope varchar2(80) := &amp;quot;an instance variable&amp;quot;;&lt;br /&gt;
  3&lt;br /&gt;
  4&lt;br /&gt;
  5  FUNCTION my_scope_is_instance&lt;br /&gt;
  6  return varchar2 is&lt;br /&gt;
  7  v_answer_1 varchar2(3) := &amp;quot;Yes&amp;quot;;&lt;br /&gt;
  8  begin&lt;br /&gt;
  9    dbms_output.put_line(chr(9)||gv_scope);&lt;br /&gt;
 10    return v_answer_1;&lt;br /&gt;
 11  end my_scope_is_instance;&lt;br /&gt;
 12&lt;br /&gt;
 13&lt;br /&gt;
 14  FUNCTION my_scope_is_global&lt;br /&gt;
 15  return varchar2 is&lt;br /&gt;
 16  v_answer_2 varchar2(3) := &amp;quot;Yes&amp;quot;;&lt;br /&gt;
 17  begin&lt;br /&gt;
 18    dbms_output.put_line(chr(9)||iv_scope);&lt;br /&gt;
 19    return v_answer_2;&lt;br /&gt;
 20  end my_scope_is_global;&lt;br /&gt;
 21&lt;br /&gt;
 22&lt;br /&gt;
 23  PROCEDURE my_scope_is_instance is&lt;br /&gt;
 24  v_answer_3 varchar2(3) := &amp;quot;Yes&amp;quot;;&lt;br /&gt;
 25  begin&lt;br /&gt;
 26    dbms_output.put_line(chr(9)||gv_scope);&lt;br /&gt;
 27    dbms_output.put_line(v_answer_3);&lt;br /&gt;
 28  end my_scope_is_instance;&lt;br /&gt;
 29&lt;br /&gt;
 30&lt;br /&gt;
 31  PROCEDURE my_scope_is_global is&lt;br /&gt;
 32  v_answer_4 varchar2(3) := &amp;quot;Yes&amp;quot;;&lt;br /&gt;
 33  begin&lt;br /&gt;
 34    dbms_output.put_line(chr(9)||iv_scope);&lt;br /&gt;
 35    dbms_output.put_line(v_answer_4);&lt;br /&gt;
 36  end my_scope_is_global;&lt;br /&gt;
 37&lt;br /&gt;
 38&lt;br /&gt;
 39  end SCOPES;&lt;br /&gt;
 40  /&lt;br /&gt;
Package body 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; declare&lt;br /&gt;
  2      v_scope varchar2(40) := &amp;quot;I&amp;quot;&amp;quot;m a local variable&amp;quot;;&lt;br /&gt;
  3      FUNCTION my_scope_is_local&lt;br /&gt;
  4      return varchar2 is&lt;br /&gt;
  5          v_answer_0 varchar2(3) := &amp;quot;Yes&amp;quot;;&lt;br /&gt;
  6      begin&lt;br /&gt;
  7        return v_answer_0;&lt;br /&gt;
  8      end my_scope_is_local;&lt;br /&gt;
  9&lt;br /&gt;
 10      PROCEDURE my_scope_is_local is&lt;br /&gt;
 11          v_answer varchar2(3) := &amp;quot;Yes&amp;quot;;&lt;br /&gt;
 12      begin&lt;br /&gt;
 13        dbms_output.put_line(v_answer);&lt;br /&gt;
 14      end my_scope_is_local;&lt;br /&gt;
 15  begin&lt;br /&gt;
 16&lt;br /&gt;
 17    dbms_output.put_line(v_scope);&lt;br /&gt;
 18&lt;br /&gt;
 19    dbms_output.put_line(SCOPES.gv_scope);&lt;br /&gt;
 20&lt;br /&gt;
 21    dbms_output.put_line(my_scope_is_local());&lt;br /&gt;
 22&lt;br /&gt;
 23    dbms_output.put_line(SCOPES.my_scope_is_global());&lt;br /&gt;
 24&lt;br /&gt;
 25    my_scope_is_local();&lt;br /&gt;
 26&lt;br /&gt;
 27    SCOPES.my_scope_is_global();&lt;br /&gt;
 28&lt;br /&gt;
 29&lt;br /&gt;
 30  end;&lt;br /&gt;
 31  /&lt;br /&gt;
I&amp;quot;m a local variable&lt;br /&gt;
I&amp;quot;m a global (or package spec) variable&lt;br /&gt;
Yes&lt;br /&gt;
        an instance variable&lt;br /&gt;
Yes&lt;br /&gt;
Yes&lt;br /&gt;
        an instance variable&lt;br /&gt;
Yes&lt;br /&gt;
PL/SQL procedure successfully completed.&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 function to initialize the package level variable==&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 keepcount (counter INTEGER);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO keepcount VALUES (1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE FUNCTION updcount RETURN INTEGER&lt;br /&gt;
  2  IS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4     UPDATE keepcount SET counter = counter + 1;&lt;br /&gt;
  5     RETURN 1;&lt;br /&gt;
  6  END;&lt;br /&gt;
  7  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE demo&lt;br /&gt;
  2  AS&lt;br /&gt;
  3     PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4     global_x PLS_INTEGER := updcount;&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE demo2&lt;br /&gt;
  2  AS&lt;br /&gt;
  3     PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4     FUNCTION global_x RETURN PLS_INTEGER;&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY demo2&lt;br /&gt;
  2  AS&lt;br /&gt;
  3     PRAGMA SERIALLY_REUSABLE;&lt;br /&gt;
  4     g_global_x PLS_INTEGER := updcount;&lt;br /&gt;
  5     FUNCTION global_x RETURN PLS_INTEGER&lt;br /&gt;
  6        IS BEGIN RETURN g_global_x; END;&lt;br /&gt;
  7  END;&lt;br /&gt;
  8  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DROP TABLE keepcount;&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;
== Use package to define variable and use across code blocks==&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 employee&lt;br /&gt;
  2          (&lt;br /&gt;
  3           empl_no                integer         primary key&lt;br /&gt;
  4          ,lastname               varchar2(20)    not null&lt;br /&gt;
  5          ,firstname              varchar2(15)    not null&lt;br /&gt;
  6          ,midinit                varchar2(1)&lt;br /&gt;
  7          ,street                 varchar2(30)&lt;br /&gt;
  8          ,city                   varchar2(20)&lt;br /&gt;
  9          ,state                  varchar2(2)&lt;br /&gt;
 10          ,zip                    varchar2(5)&lt;br /&gt;
 11          ,zip_4                  varchar2(4)&lt;br /&gt;
 12          ,area_code              varchar2(3)&lt;br /&gt;
 13          ,phone                  varchar2(8)&lt;br /&gt;
 14          ,company_name           varchar2(50));&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 employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(1,&amp;quot;Jones&amp;quot;,&amp;quot;Joe&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;10 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;11111&amp;quot;,&amp;quot;1111&amp;quot;,&amp;quot;111&amp;quot;, &amp;quot;111-1111&amp;quot;,&amp;quot;A Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(2,&amp;quot;Smith&amp;quot;,&amp;quot;Sue&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;20 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;22222&amp;quot;,&amp;quot;2222&amp;quot;,&amp;quot;222&amp;quot;, &amp;quot;222-111&amp;quot;,&amp;quot;B Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(3,&amp;quot;Anderson&amp;quot;,&amp;quot;Peggy&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;500 St&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;33333&amp;quot;,&amp;quot;3333&amp;quot;,&amp;quot;333&amp;quot;, &amp;quot;333-3333&amp;quot;,&amp;quot;C Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(4,&amp;quot;Andy&amp;quot;,&amp;quot;Jill&amp;quot;, null,&amp;quot;930 St&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;44444&amp;quot;,&amp;quot;4444&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;634-7733&amp;quot;,&amp;quot;D Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(5,&amp;quot;OK&amp;quot;,&amp;quot;Carl&amp;quot;,&amp;quot;L&amp;quot;,&amp;quot;19 Drive&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;55555&amp;quot;,&amp;quot;3234&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;243-4243&amp;quot;,&amp;quot;E Company&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(6,&amp;quot;Peter&amp;quot;,&amp;quot;Jee&amp;quot;,&amp;quot;Q&amp;quot;,&amp;quot;38 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;66666&amp;quot;,&amp;quot;4598&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;454-5443&amp;quot;,&amp;quot;F Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(7,&amp;quot;Baker&amp;quot;,&amp;quot;Paul&amp;quot;,&amp;quot;V&amp;quot;,&amp;quot;738 St.&amp;quot;,&amp;quot;Queens&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;77777&amp;quot;,&amp;quot;3842&amp;quot;,&amp;quot;718&amp;quot;, &amp;quot;664-4333&amp;quot;,&amp;quot;G Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(8,&amp;quot;Young&amp;quot;,&amp;quot;Steve&amp;quot;,&amp;quot;J&amp;quot;,&amp;quot;388 Ave&amp;quot;,&amp;quot;New York&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;88888&amp;quot;,&amp;quot;3468&amp;quot;,&amp;quot;212&amp;quot;, &amp;quot;456-4566&amp;quot;,&amp;quot;H Associates Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(9,&amp;quot;Mona&amp;quot;,&amp;quot;Joe&amp;quot;,&amp;quot;T&amp;quot;,&amp;quot;9300 Ave&amp;quot;,&amp;quot;Kansas City&amp;quot;,&amp;quot;MO&amp;quot;,&amp;quot;99999&amp;quot;,&amp;quot;3658&amp;quot;,&amp;quot;415&amp;quot;, &amp;quot;456-4563&amp;quot;,&amp;quot;J Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(10,&amp;quot;Hackett&amp;quot;,&amp;quot;Karen&amp;quot;,&amp;quot;S&amp;quot;,&amp;quot;Kings Rd. Apt 833&amp;quot;,&amp;quot;Bellmore&amp;quot;,&amp;quot;NY&amp;quot;,&amp;quot;61202&amp;quot;,&amp;quot;3898&amp;quot;,&amp;quot;516&amp;quot;, &amp;quot;767-5677&amp;quot;,&amp;quot;AA Inc&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into employee(empl_no,lastname,firstname,midinit,street,city,state,zip,zip_4,area_code,phone,company_name)&lt;br /&gt;
  2  values(11,&amp;quot;Bob&amp;quot;,&amp;quot;Jack&amp;quot;,&amp;quot;S&amp;quot;,&amp;quot;12 Giant Rd.&amp;quot;,&amp;quot;Newark&amp;quot;,&amp;quot;NJ&amp;quot;,&amp;quot;27377&amp;quot;,&amp;quot;3298&amp;quot;,&amp;quot;908&amp;quot;, &amp;quot;123-7367&amp;quot;,&amp;quot;Z Associates&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;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE custpack AS&lt;br /&gt;
  2    TYPE cust_table_type IS TABLE OF employee%rowtype&lt;br /&gt;
  3        INDEX BY BINARY_INTEGER;&lt;br /&gt;
  4  END;&lt;br /&gt;
  5  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE cust_list (p1 OUT custpack.cust_table_type)&lt;br /&gt;
  2  IS&lt;br /&gt;
  3    indx        PLS_INTEGER := 1;&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    FOR cust_rec IN (select * from employee) LOOP&lt;br /&gt;
  6        p1(indx) := cust_rec;&lt;br /&gt;
  7        indx := indx + 1;&lt;br /&gt;
  8    END LOOP;&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&lt;br /&gt;
SP2-0804: Procedure created with compilation warnings&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    cust_table  custpack.cust_table_type;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    cust_list(cust_table);&lt;br /&gt;
  5    FOR x IN 1..cust_table.COUNT LOOP&lt;br /&gt;
  6      dbms_output.put_line(cust_table(x).lastname);&lt;br /&gt;
  7    END LOOP;&lt;br /&gt;
  8  END;&lt;br /&gt;
  9  /&lt;br /&gt;
Jones&lt;br /&gt;
Smith&lt;br /&gt;
Anderson&lt;br /&gt;
Andy&lt;br /&gt;
OK&lt;br /&gt;
Peter&lt;br /&gt;
Baker&lt;br /&gt;
Young&lt;br /&gt;
Mona&lt;br /&gt;
Hackett&lt;br /&gt;
Bob&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table employee;&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>