<?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%2FObject_Oriented_Database%2FObject</id>
		<title>Oracle PL/SQL/Object Oriented Database/Object - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FObject_Oriented_Database%2FObject"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Object_Oriented_Database/Object&amp;action=history"/>
		<updated>2026-05-25T23:22:14Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Object_Oriented_Database/Object&amp;diff=2699&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/Object_Oriented_Database/Object&amp;diff=2699&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:19Z</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/Object_Oriented_Database/Object&amp;diff=2700&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Object_Oriented_Database/Object&amp;diff=2700&amp;oldid=prev"/>
				<updated>2010-05-26T10:02:42Z</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;==Behavior of dependent objects.==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; COLUMN object_name FORMAT a20&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE simple_table (f1 NUMBER);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE Dependee AS&lt;br /&gt;
  2    PROCEDURE Example(p_Val IN NUMBER);&lt;br /&gt;
  3  END Dependee;&lt;br /&gt;
  4  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY Dependee AS&lt;br /&gt;
  2    PROCEDURE Example(p_Val IN NUMBER) IS&lt;br /&gt;
  3    BEGIN&lt;br /&gt;
  4       INSERT INTO simple_table VALUES (p_Val);&lt;br /&gt;
  5    END Example;&lt;br /&gt;
  6  END Dependee;&lt;br /&gt;
  7  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE Depender(p_Val IN NUMBER) AS&lt;br /&gt;
  2  BEGIN&lt;br /&gt;
  3    Dependee.Example(p_Val + 1);&lt;br /&gt;
  4  END Depender;&lt;br /&gt;
  5  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT object_name, object_type, status FROM user_objects WHERE object_name IN (&amp;quot;DEPENDER&amp;quot;, &amp;quot;DEPENDEE&amp;quot;,&amp;quot;SIMPLE_TABLE&amp;quot;);&lt;br /&gt;
OBJECT_NAME          OBJECT_TYPE         STATUS&lt;br /&gt;
-------------------- ------------------- ----------&lt;br /&gt;
DEPENDEE             PACKAGE             VALID&lt;br /&gt;
DEPENDEE             PACKAGE BODY        VALID&lt;br /&gt;
DEPENDER             PROCEDURE           VALID&lt;br /&gt;
SIMPLE_TABLE         TABLE               VALID&lt;br /&gt;
4 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY Dependee AS&lt;br /&gt;
  2    PROCEDURE Example(p_Val IN NUMBER) IS&lt;br /&gt;
  3    BEGIN&lt;br /&gt;
  4      INSERT INTO simple_table VALUES (p_Val - 1);&lt;br /&gt;
  5    END Example;&lt;br /&gt;
  6  END Dependee;&lt;br /&gt;
  7  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT object_name, object_type, status FROM user_objects WHERE object_name IN (&amp;quot;DEPENDER&amp;quot;, &amp;quot;DEPENDEE&amp;quot;,&amp;quot;SIMPLE_TABLE&amp;quot;);&lt;br /&gt;
OBJECT_NAME          OBJECT_TYPE         STATUS&lt;br /&gt;
-------------------- ------------------- ----------&lt;br /&gt;
DEPENDEE             PACKAGE             VALID&lt;br /&gt;
DEPENDEE             PACKAGE BODY        VALID&lt;br /&gt;
DEPENDER             PROCEDURE           VALID&lt;br /&gt;
SIMPLE_TABLE         TABLE               VALID&lt;br /&gt;
4 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DROP TABLE simple_table;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT object_name, object_type, status FROM user_objects WHERE object_name IN (&amp;quot;DEPENDER&amp;quot;, &amp;quot;DEPENDEE&amp;quot;,&amp;quot;SIMPLE_TABLE&amp;quot;);&lt;br /&gt;
OBJECT_NAME          OBJECT_TYPE         STATUS&lt;br /&gt;
-------------------- ------------------- ----------&lt;br /&gt;
DEPENDEE             PACKAGE             VALID&lt;br /&gt;
DEPENDEE             PACKAGE BODY        INVALID&lt;br /&gt;
DEPENDER             PROCEDURE           VALID&lt;br /&gt;
3 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Build data type with another user type==&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;
    &lt;br /&gt;
SQL&amp;gt; create or replace type address_type as object&lt;br /&gt;
  2  ( city    varchar2(30),&lt;br /&gt;
  3    street  varchar2(30),&lt;br /&gt;
  4    state   varchar2(2),&lt;br /&gt;
  5    zip     number&lt;br /&gt;
  6  )&lt;br /&gt;
  7  /&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; create or replace type person_type as object&lt;br /&gt;
  2  ( name             varchar2(30),&lt;br /&gt;
  3    dob              date,&lt;br /&gt;
  4    home_address     address_type,&lt;br /&gt;
  5    work_address     address_type&lt;br /&gt;
  6  )&lt;br /&gt;
  7  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; create table people of person_type&lt;br /&gt;
  2  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select sys_nc_rowinfo$ from people;&lt;br /&gt;
no rows selected&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table people;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Combine user-defined type to create new type==&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;
    &lt;br /&gt;
SQL&amp;gt; create type addressType as object&lt;br /&gt;
  2  (Street  VARCHAR2(50),&lt;br /&gt;
  3   City    VARCHAR2(25),&lt;br /&gt;
  4   State   CHAR(2),&lt;br /&gt;
  5   Zip     NUMBER);&lt;br /&gt;
  6  /&lt;br /&gt;
SQL&amp;gt; create type personType as object&lt;br /&gt;
  2  (Name     VARCHAR2(25),&lt;br /&gt;
  3   Address  addressType);&lt;br /&gt;
  4  /&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type personType as object&lt;br /&gt;
  2  (Name     VARCHAR2(25),&lt;br /&gt;
  3   Address  addressType);&lt;br /&gt;
  4  /&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type personType force;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type addressType force;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create a stored type which is visible to SQL and PL/SQL.==&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;
    &lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE NameList AS&lt;br /&gt;
  2    VARRAY(20) OF VARCHAR2(30);&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    -- This type is local to this block.&lt;br /&gt;
  3    TYPE DateList IS VARRAY(10) OF DATE;&lt;br /&gt;
  4&lt;br /&gt;
  5    -- We can create variables of both DateList and NameList here.&lt;br /&gt;
  6    v_Dates DateList;&lt;br /&gt;
  7    v_Names NameList;&lt;br /&gt;
  8  BEGIN&lt;br /&gt;
  9    NULL;&lt;br /&gt;
 10  END;&lt;br /&gt;
 11  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create Object==&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;
   &lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; --User-defined types&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TYPE address_typ AS OBJECT&lt;br /&gt;
  2   (StreetNo      NUMBER(10),&lt;br /&gt;
  3    StreetName    VARCHAR2(100),&lt;br /&gt;
  4    AptNo         NUMBER(5),&lt;br /&gt;
  5    City          VARCHAR2(100),&lt;br /&gt;
  6    State         VARCHAR2(100),&lt;br /&gt;
  7    ZipCode       NUMBER(9),&lt;br /&gt;
  8    Country       VARCHAR2(100));&lt;br /&gt;
  9  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;  CREATE TABLE people&lt;br /&gt;
  2    (ID        NUMBER(5),&lt;br /&gt;
  3     FirstName VARCHAR2(100),&lt;br /&gt;
  4     LastName  VARCHAR2(100),&lt;br /&gt;
  5     Address   address_typ);&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 people&lt;br /&gt;
  2   VALUES(10,&lt;br /&gt;
  3          &amp;quot;John&amp;quot;,&lt;br /&gt;
  4          &amp;quot;Smith&amp;quot;,&lt;br /&gt;
  5          address_typ(123,&amp;quot;Happy Lane&amp;quot;, NULL,&lt;br /&gt;
  6          &amp;quot;Smalltown&amp;quot;,&amp;quot;Alaska&amp;quot;, 12345,&amp;quot;USA&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; SELECT * FROM people;&lt;br /&gt;
                      ID FIRSTNAME&lt;br /&gt;
------------------------ ----------------------------------------------------------------------------------------------------&lt;br /&gt;
LASTNAME&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
ADDRESS(STREETNO, STREETNAME, APTNO, CITY, STATE, ZIPCODE, COUNTRY)&lt;br /&gt;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   10.00 John&lt;br /&gt;
Smith&lt;br /&gt;
ADDRESS_TYP(123.00, &amp;quot;Happy Lane&amp;quot;, NULL, &amp;quot;Smalltown&amp;quot;, &amp;quot;Alaska&amp;quot;, 12345.00, &amp;quot;USA&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table people;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CREATE OR REPLACE TYPE==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SET ECHO ON&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE emp_chg AS OBJECT (&lt;br /&gt;
  2      emp_id NUMBER,&lt;br /&gt;
  3      pay_rate NUMBER(9,2),&lt;br /&gt;
  4      pay_type CHAR(1),&lt;br /&gt;
  5      leave_dept NUMBER,&lt;br /&gt;
  6      join_dept NUMBER&lt;br /&gt;
  7      );&lt;br /&gt;
  8  /&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type emp_chg;&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; --&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create the object and collection 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;
    &lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE addressType AS OBJECT (&lt;br /&gt;
  2    street VARCHAR2(15),&lt;br /&gt;
  3    city   VARCHAR2(15),&lt;br /&gt;
  4    state  CHAR(2),&lt;br /&gt;
  5    zip    VARCHAR2(5)&lt;br /&gt;
  6  );&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 addressTypeVArray AS VARRAY(2) OF VARCHAR2(50);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE addressTypeNestedTable AS TABLE OF addressType;&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- varray in temporary table example&lt;br /&gt;
SQL&amp;gt; CREATE GLOBAL TEMPORARY TABLE empTempTable (&lt;br /&gt;
  2    id         INTEGER PRIMARY KEY,&lt;br /&gt;
  3    fname VARCHAR2(10),&lt;br /&gt;
  4    lname  VARCHAR2(10),&lt;br /&gt;
  5    addresses  addressTypeVArray&lt;br /&gt;
  6  );&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE empTable (&lt;br /&gt;
  2    id         INTEGER PRIMARY KEY,&lt;br /&gt;
  3    fname VARCHAR2(10),&lt;br /&gt;
  4    lname  VARCHAR2(10),&lt;br /&gt;
  5    addresses  addressTypeNestedTable&lt;br /&gt;
  6  )&lt;br /&gt;
  7  NESTED TABLE&lt;br /&gt;
  8    addresses&lt;br /&gt;
  9  STORE AS&lt;br /&gt;
 10    nested_addresses2 TABLESPACE users;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- equal/not equal example&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE equal_example AS&lt;br /&gt;
  2    TYPE charTable IS TABLE OF VARCHAR2(10);&lt;br /&gt;
  3    emp1 charTable;&lt;br /&gt;
  4    emp2 charTable;&lt;br /&gt;
  5    emp3 charTable;&lt;br /&gt;
  6    result BOOLEAN;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    emp1 := charTable(&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;);&lt;br /&gt;
  9    emp2 := charTable(&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;);&lt;br /&gt;
 10    emp3 := charTable(&amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;);&lt;br /&gt;
 11&lt;br /&gt;
 12&lt;br /&gt;
 13    result := emp1 &amp;lt;&amp;gt; emp3;&lt;br /&gt;
 14    IF result THEN&lt;br /&gt;
 15      DBMS_OUTPUT.PUT_LINE(&amp;quot;emp1 not equal to emp3&amp;quot;);&lt;br /&gt;
 16    END IF;&lt;br /&gt;
 17  END equal_example;&lt;br /&gt;
 18  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type addressType force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop type addressTypeVArray force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop TYPE addressTypeNestedTable force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop TABLE empTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create type and use it in inner query==&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;
    &lt;br /&gt;
SQL&amp;gt; create or replace type myScalarType as object( cnt number, average number )&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select username, a.data.cnt, a.data.average&lt;br /&gt;
  2    from (&lt;br /&gt;
  3      select username, (select myScalarType( count(*), avg(object_id) ) from all_objects b where b.owner = a.username ) data from all_users a ) A&lt;br /&gt;
  4  /&lt;br /&gt;
USERNAME                         DATA.CNT DATA.AVERAGE&lt;br /&gt;
------------------------------ ---------- ------------&lt;br /&gt;
SYS                                  6520   5009.74064&lt;br /&gt;
SYSTEM                                422   6095.87678&lt;br /&gt;
OUTLN                                   7   1172.57143&lt;br /&gt;
DIP                                     0&lt;br /&gt;
TSMSYS                                  2       8606.5&lt;br /&gt;
INV15                                   2      16237.5&lt;br /&gt;
DBSNMP                                 46   9592.65217&lt;br /&gt;
INV10                                   2      16227.5&lt;br /&gt;
CTXSYS                                338   9877.92012&lt;br /&gt;
XDB                                   334   10800.7485&lt;br /&gt;
ANONYMOUS                               0&lt;br /&gt;
USERNAME                         DATA.CNT DATA.AVERAGE&lt;br /&gt;
------------------------------ ---------- ------------&lt;br /&gt;
MDSYS                                 458   11667.2009&lt;br /&gt;
HR                                     34      12104.5&lt;br /&gt;
FLOWS_FILES                            11   12717.2727&lt;br /&gt;
FLOWS_020100                         1085    12813.424&lt;br /&gt;
sqle                                530   16254.6849&lt;br /&gt;
INV11                                   2      16229.5&lt;br /&gt;
INV12                                   2      16231.5&lt;br /&gt;
INV13                                   2      16233.5&lt;br /&gt;
INV14                                   2      16235.5&lt;br /&gt;
PLSQL                                   0&lt;br /&gt;
INV16                                   2      16239.5&lt;br /&gt;
USERNAME                         DATA.CNT DATA.AVERAGE&lt;br /&gt;
------------------------------ ---------- ------------&lt;br /&gt;
INV17                                   2      16241.5&lt;br /&gt;
INV18                                   2      16243.5&lt;br /&gt;
INV19                                   2      16245.5&lt;br /&gt;
INV20                                   2      16247.5&lt;br /&gt;
DEFINER                                 4      16250.5&lt;br /&gt;
27 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create types and then use it in pl/sql block==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE unitType AS VARRAY(13) OF VARCHAR2(5 CHAR);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE categoryType AS VARRAY(4) OF VARCHAR2(8 CHAR);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE charArrayType AS TABLE OF VARCHAR2(17 CHAR);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    counter INTEGER := 0;&lt;br /&gt;
  3&lt;br /&gt;
  4    suits categoryType :=categoryType(&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;D&amp;quot;);&lt;br /&gt;
  5    units unitType :=unitType(&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;,&amp;quot;4&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;);&lt;br /&gt;
  6&lt;br /&gt;
  7    charArray charArrayType := charArrayType();&lt;br /&gt;
  8  BEGIN&lt;br /&gt;
  9&lt;br /&gt;
 10&lt;br /&gt;
 11&lt;br /&gt;
 12    FOR i IN 1..counter LOOP&lt;br /&gt;
 13      dbms_output.put_line(&amp;quot;[&amp;quot;||charArray(i)||&amp;quot;]&amp;quot;);&lt;br /&gt;
 14    END LOOP;&lt;br /&gt;
 15  END;&lt;br /&gt;
 16  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Name type==&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;
    &lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; create type nameType as object(&lt;br /&gt;
  2  fname     VARCHAR2(25),&lt;br /&gt;
  3  Middle_Initial  CHAR(1),&lt;br /&gt;
  4  lname       VARCHAR2(30),&lt;br /&gt;
  5  Suffix          VARCHAR2(5));&lt;br /&gt;
  6  /&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type nameType;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==One to list using object references==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE courseType AS OBJECT&lt;br /&gt;
  2     (course_id        VARCHAR2(10),&lt;br /&gt;
  3      course_name      VARCHAR2(30))&lt;br /&gt;
  4     /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE bookType AS OBJECT&lt;br /&gt;
  2     (book_id          VARCHAR2(10),&lt;br /&gt;
  3      book_title       VARCHAR2(30),&lt;br /&gt;
  4      course_book      REF courseType)&lt;br /&gt;
  5     /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE Course OF courseType&lt;br /&gt;
  2     (course_id NOT NULL,&lt;br /&gt;
  3      PRIMARY KEY (course_id));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE Book OF bookType&lt;br /&gt;
  2     (book_id NOT NULL,&lt;br /&gt;
  3      PRIMARY KEY (book_id));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE Require&lt;br /&gt;
  2     (Book             REF   bookType,&lt;br /&gt;
  3      Index_Book       NUMBER NOT NULL,&lt;br /&gt;
  4      Course           REF courseType);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type courseType force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop type bookType force;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop table Course;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table Book;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table Require;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Point type==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE Point AS OBJECT (&lt;br /&gt;
  2    x NUMBER,&lt;br /&gt;
  3    y NUMBER,&lt;br /&gt;
  4&lt;br /&gt;
  5    MEMBER FUNCTION ToString RETURN VARCHAR2,&lt;br /&gt;
  6    PRAGMA RESTRICT_REFERENCES(ToString, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
  7&lt;br /&gt;
  8    MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0,0))&lt;br /&gt;
  9      RETURN NUMBER,&lt;br /&gt;
 10    PRAGMA RESTRICT_REFERENCES(Distance, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 11&lt;br /&gt;
 12    MEMBER FUNCTION Plus(p IN Point) RETURN Point,&lt;br /&gt;
 13    PRAGMA RESTRICT_REFERENCES(Plus, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 14&lt;br /&gt;
 15    MEMBER FUNCTION Times(n IN NUMBER) RETURN Point,&lt;br /&gt;
 16    PRAGMA RESTRICT_REFERENCES(Times, RNDS, WNDS, RNPS, WNPS)&lt;br /&gt;
 17  );&lt;br /&gt;
 18  /&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY Point AS&lt;br /&gt;
  2    MEMBER FUNCTION ToString RETURN VARCHAR2 IS&lt;br /&gt;
  3      myResult VARCHAR2(20);&lt;br /&gt;
  4      v_xString VARCHAR2(8) := SUBSTR(TO_CHAR(x), 1, 8);&lt;br /&gt;
  5      v_yString VARCHAR2(8) := SUBSTR(TO_CHAR(y), 1, 8);&lt;br /&gt;
  6    BEGIN&lt;br /&gt;
  7      myResult := &amp;quot;(&amp;quot; || v_xString || &amp;quot;, &amp;quot;;&lt;br /&gt;
  8      myResult := myResult || v_yString || &amp;quot;)&amp;quot;;&lt;br /&gt;
  9      RETURN myResult;&lt;br /&gt;
 10    END ToString;&lt;br /&gt;
 11&lt;br /&gt;
 12    MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0,0))&lt;br /&gt;
 13      RETURN NUMBER IS&lt;br /&gt;
 14    BEGIN&lt;br /&gt;
 15      RETURN SQRT(POWER(x - p.x, 2) + POWER(y - p.y, 2));&lt;br /&gt;
 16    END Distance;&lt;br /&gt;
 17&lt;br /&gt;
 18    MEMBER FUNCTION Plus(p IN Point) RETURN Point IS&lt;br /&gt;
 19      myResult Point;&lt;br /&gt;
 20    BEGIN&lt;br /&gt;
 21      myResult := Point(x + p.x, y + p.y);&lt;br /&gt;
 22      RETURN myResult;&lt;br /&gt;
 23    END Plus;&lt;br /&gt;
 24&lt;br /&gt;
 25    MEMBER FUNCTION Times(n IN NUMBER) RETURN Point IS&lt;br /&gt;
 26      myResult Point;&lt;br /&gt;
 27    BEGIN&lt;br /&gt;
 28      myResult := Point(x * n, y * n);&lt;br /&gt;
 29      RETURN myResult;&lt;br /&gt;
 30    END Times;&lt;br /&gt;
 31  END;&lt;br /&gt;
 32  /&lt;br /&gt;
Type body 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;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_P1 Point := Point(-1, 5);&lt;br /&gt;
  3    v_P2 Point := Point(5, 2);&lt;br /&gt;
  4    myResult Point;&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    DBMS_OUTPUT.PUT_LINE(&amp;quot;p1: &amp;quot; || v_P1.toString);&lt;br /&gt;
  7    DBMS_OUTPUT.PUT_LINE(&amp;quot;p2: &amp;quot; || v_P2.toString);&lt;br /&gt;
  8&lt;br /&gt;
  9    DBMS_OUTPUT.PUT_LINE(&amp;quot;Distance between p1 and p2 = &amp;quot; || v_P1.Distance(v_P2));&lt;br /&gt;
 10&lt;br /&gt;
 11    DBMS_OUTPUT.PUT_LINE(&amp;quot;Distance between p1 and the origin = &amp;quot; ||&lt;br /&gt;
 12      v_P1.Distance);&lt;br /&gt;
 13&lt;br /&gt;
 14    myResult := v_P1.Times(n =&amp;gt; 2.5);&lt;br /&gt;
 15    DBMS_OUTPUT.PUT_LINE(&amp;quot;p1 * 2.5: &amp;quot; || myResult.toString);&lt;br /&gt;
 16    myResult := v_P1.Plus(p =&amp;gt; v_P2);&lt;br /&gt;
 17    DBMS_OUTPUT.PUT_LINE(&amp;quot;p1 + p2: &amp;quot; || myResult.toString);&lt;br /&gt;
 18  END;&lt;br /&gt;
 19  /&lt;br /&gt;
p1: (-1, 5)&lt;br /&gt;
p2: (5, 2)&lt;br /&gt;
Distance between p1 and p2 = 6.70820393249936908922752100619382870632&lt;br /&gt;
Distance between p1 and the origin = 5.09901951359278483002822410902278198956&lt;br /&gt;
p1 * 2.5: (-2.5, 12.5)&lt;br /&gt;
p1 + p2: (4, 7)&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PriceType becomes the datatype of the price attribute in the ProductType object type==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE PriceType AS OBJECT (&lt;br /&gt;
  2      discount_rate   NUMBER (10, 4),&lt;br /&gt;
  3      price           NUMBER (10, 2),&lt;br /&gt;
  4      CONSTRUCTOR FUNCTION PriceType (price NUMBER)&lt;br /&gt;
  5         RETURN SELF AS RESULT&lt;br /&gt;
  6   )&lt;br /&gt;
  7   INSTANTIABLE FINAL;&lt;br /&gt;
  8   /&lt;br /&gt;
Type 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; -- Body&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY PriceType&lt;br /&gt;
  2   AS&lt;br /&gt;
  3      CONSTRUCTOR FUNCTION PriceType (price NUMBER)&lt;br /&gt;
  4         RETURN SELF AS RESULT&lt;br /&gt;
  5      AS&lt;br /&gt;
  6      BEGIN&lt;br /&gt;
  7         SELF.price := price * .9;&lt;br /&gt;
  8         RETURN;&lt;br /&gt;
  9      END PriceType;&lt;br /&gt;
 10   END;&lt;br /&gt;
 11   /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&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;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==reference user-defined data type in another block==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE NameList AS&lt;br /&gt;
  2    VARRAY(20) OF VARCHAR2(30);&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_Names2 NameList;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    NULL;&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Student type==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE Student AS OBJECT (&lt;br /&gt;
  2    ID               NUMBER(5),&lt;br /&gt;
  3    first_name       VARCHAR2(20),&lt;br /&gt;
  4    last_name        VARCHAR2(20),&lt;br /&gt;
  5    major            VARCHAR2(30),&lt;br /&gt;
  6    current_credits  NUMBER(3),&lt;br /&gt;
  7&lt;br /&gt;
  8    MEMBER FUNCTION FormattedName&lt;br /&gt;
  9      RETURN VARCHAR2,&lt;br /&gt;
 10    PRAGMA RESTRICT_REFERENCES(FormattedName, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 11&lt;br /&gt;
 12    MEMBER PROCEDURE ChangeMajor(p_NewMajor IN VARCHAR2),&lt;br /&gt;
 13    PRAGMA RESTRICT_REFERENCES(ChangeMajor, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 14&lt;br /&gt;
 15    MEMBER PROCEDURE UpdateCredits(p_CompletedClass IN Class),&lt;br /&gt;
 16    PRAGMA RESTRICT_REFERENCES(UpdateCredits, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 17&lt;br /&gt;
 18    ORDER MEMBER FUNCTION CompareStudent(p_Student IN Student)&lt;br /&gt;
 19      RETURN NUMBER&lt;br /&gt;
 20  );&lt;br /&gt;
 21  /&lt;br /&gt;
Type 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 TYPE BODY Student AS&lt;br /&gt;
  2    MEMBER FUNCTION FormattedName&lt;br /&gt;
  3      RETURN VARCHAR2 IS&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5      RETURN first_name || &amp;quot; &amp;quot; || last_name;&lt;br /&gt;
  6    END FormattedName;&lt;br /&gt;
  7&lt;br /&gt;
  8    MEMBER PROCEDURE ChangeMajor(p_NewMajor IN VARCHAR2) IS&lt;br /&gt;
  9    BEGIN&lt;br /&gt;
 10      major := p_NewMajor;&lt;br /&gt;
 11    END ChangeMajor;&lt;br /&gt;
 12&lt;br /&gt;
 13    MEMBER PROCEDURE UpdateCredits(p_CompletedClass IN Class) IS&lt;br /&gt;
 14    BEGIN&lt;br /&gt;
 15      current_credits := current_credits +&lt;br /&gt;
 16                         p_CompletedClass.num_credits;&lt;br /&gt;
 17    END UpdateCredits;&lt;br /&gt;
 18&lt;br /&gt;
 19    ORDER MEMBER FUNCTION CompareStudent(p_Student IN Student)&lt;br /&gt;
 20      RETURN NUMBER IS&lt;br /&gt;
 21    BEGIN&lt;br /&gt;
 22      IF p_Student.last_name = SELF.last_name THEN&lt;br /&gt;
 23        IF p_Student.first_name &amp;lt; SELF.first_name THEN&lt;br /&gt;
 24          RETURN 1;&lt;br /&gt;
 25        ELSIF p_Student.first_name &amp;gt; SELF.first_name THEN&lt;br /&gt;
 26          RETURN -1;&lt;br /&gt;
 27        ELSE&lt;br /&gt;
 28          RETURN 0;&lt;br /&gt;
 29        END IF;&lt;br /&gt;
 30      ELSE&lt;br /&gt;
 31        IF p_Student.last_name &amp;lt; SELF.last_name THEN&lt;br /&gt;
 32          RETURN 1;&lt;br /&gt;
 33        ELSE&lt;br /&gt;
 34          RETURN -1;&lt;br /&gt;
 35        END IF;&lt;br /&gt;
 36      END IF;&lt;br /&gt;
 37    END CompareStudent;&lt;br /&gt;
 38  END;&lt;br /&gt;
 39  /&lt;br /&gt;
Type body 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;&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_Student Student; -- This assigns NULL to v_Student by default&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    v_Student.ID := 10020;&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==This script demonstrates complex objects==&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;
    &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE PriceType AS OBJECT (&lt;br /&gt;
  2     discount_rate  NUMBER(10,4),&lt;br /&gt;
  3     price          NUMBER(10,2),&lt;br /&gt;
  4&lt;br /&gt;
  5     MEMBER FUNCTION discount_price RETURN NUMBER)&lt;br /&gt;
  6  INSTANTIABLE&lt;br /&gt;
  7  FINAL;&lt;br /&gt;
  8  /&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 inventory_obj AS OBJECT (&lt;br /&gt;
  2     item_id        NUMBER(10),&lt;br /&gt;
  3     num_in_stock   NUMBER(10),&lt;br /&gt;
  4     reorder_status VARCHAR2(20),&lt;br /&gt;
  5     price       REF   PriceType);&lt;br /&gt;
  6  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use self to reference member variable in constructor==&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;
    &lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE myType&lt;br /&gt;
  2  AUTHID CURRENT_USER IS OBJECT&lt;br /&gt;
  3  ( my_number NUMBER&lt;br /&gt;
  4  , my_name   VARCHAR2(20 CHAR)&lt;br /&gt;
  5  , CONSTRUCTOR FUNCTION myType RETURN SELF AS RESULT&lt;br /&gt;
  6  , CONSTRUCTOR FUNCTION myType (my_number NUMBER, my_name   VARCHAR2 )RETURN SELF AS RESULT&lt;br /&gt;
  7  , MEMBER PROCEDURE print_instance_variable&lt;br /&gt;
  8  , ORDER MEMBER FUNCTION equals( my_class myType ) RETURN NUMBER )&lt;br /&gt;
  9  INSTANTIABLE NOT FINAL;&lt;br /&gt;
 10  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&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; &lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY myType AS&lt;br /&gt;
  2&lt;br /&gt;
  3    &lt;br /&gt;
  4    CONSTRUCTOR FUNCTION myType&lt;br /&gt;
  5    RETURN SELF AS RESULT IS&lt;br /&gt;
  6&lt;br /&gt;
  7      &lt;br /&gt;
  8      my_instance_number NUMBER := 0;&lt;br /&gt;
  9      my_instance_name   VARCHAR2(20 CHAR) := &amp;quot;&amp;quot;;&lt;br /&gt;
 10&lt;br /&gt;
 11    BEGIN&lt;br /&gt;
 12&lt;br /&gt;
 13      &lt;br /&gt;
 14      SELF.my_number := my_instance_number;&lt;br /&gt;
 15      SELF.my_name := my_instance_name;&lt;br /&gt;
 16&lt;br /&gt;
 17      &lt;br /&gt;
 18      RETURN;&lt;br /&gt;
 19&lt;br /&gt;
 20    END;&lt;br /&gt;
 21&lt;br /&gt;
 22    &lt;br /&gt;
 23    CONSTRUCTOR FUNCTION myType( my_number NUMBER , my_name   VARCHAR2 )&lt;br /&gt;
 24    RETURN SELF AS RESULT IS&lt;br /&gt;
 25&lt;br /&gt;
 26    BEGIN&lt;br /&gt;
 27&lt;br /&gt;
 28      &lt;br /&gt;
 29      SELF.my_number := my_number;&lt;br /&gt;
 30      SELF.my_name := my_name;&lt;br /&gt;
 31&lt;br /&gt;
 32      &lt;br /&gt;
 33      RETURN;&lt;br /&gt;
 34&lt;br /&gt;
 35    END;&lt;br /&gt;
 36&lt;br /&gt;
 37    &lt;br /&gt;
 38    MEMBER PROCEDURE print_instance_variable IS&lt;br /&gt;
 39&lt;br /&gt;
 40    BEGIN&lt;br /&gt;
 41      &lt;br /&gt;
 42      DBMS_OUTPUT.PUT_LINE(&amp;quot;Instance Number [&amp;quot;||SELF.my_number||&amp;quot;]&amp;quot;);&lt;br /&gt;
 43      DBMS_OUTPUT.PUT_LINE(&amp;quot;Instance Name   [&amp;quot;||SELF.my_name||&amp;quot;]&amp;quot;);&lt;br /&gt;
 44&lt;br /&gt;
 45    END;&lt;br /&gt;
 46&lt;br /&gt;
 47    &lt;br /&gt;
 48    ORDER MEMBER FUNCTION equals( my_class myType )&lt;br /&gt;
 49    RETURN NUMBER IS&lt;br /&gt;
 50&lt;br /&gt;
 51      &lt;br /&gt;
 52      false_value NUMBER := 0;&lt;br /&gt;
 53      true_value  NUMBER := 1;&lt;br /&gt;
 54&lt;br /&gt;
 55    BEGIN&lt;br /&gt;
 56&lt;br /&gt;
 57      &lt;br /&gt;
 58      IF SELF.my_number = my_class.my_number AND&lt;br /&gt;
 59         SELF.my_name = my_class.my_name     THEN&lt;br /&gt;
 60&lt;br /&gt;
 61        &lt;br /&gt;
 62        RETURN true_value;&lt;br /&gt;
 63&lt;br /&gt;
 64      ELSE&lt;br /&gt;
 65&lt;br /&gt;
 66        &lt;br /&gt;
 67        RETURN false_value;&lt;br /&gt;
 68&lt;br /&gt;
 69      END IF;&lt;br /&gt;
 70&lt;br /&gt;
 71    END;&lt;br /&gt;
 72&lt;br /&gt;
 73  END;&lt;br /&gt;
 74  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&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;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use user-defined type 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;
    &lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE list 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 format_list(set_in LIST) RETURN VARCHAR2 IS&lt;br /&gt;
  2    returnValue VARCHAR2(2000);&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    IF set_in IS NULL THEN&lt;br /&gt;
  5      dbms_output.put_line(&amp;quot;Null&amp;quot;);&lt;br /&gt;
  6    END IF;&lt;br /&gt;
  7    RETURN returnValue;&lt;br /&gt;
  8  END format_list;&lt;br /&gt;
  9  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>