<?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%2FSelect</id>
		<title>Oracle PL/SQL/Object Oriented Database/Select - История изменений</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%2FSelect"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Object_Oriented_Database/Select&amp;action=history"/>
		<updated>2026-07-15T09:01:06Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Object_Oriented_Database/Select&amp;diff=2681&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/Select&amp;diff=2681&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/Select&amp;diff=2682&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/Select&amp;diff=2682&amp;oldid=prev"/>
				<updated>2010-05-26T10:02:39Z</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;==demonstrates SQL operations on object types.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&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;
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 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; set serveroutput on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_Point1 Point := Point(1, 2);&lt;br /&gt;
  3    v_Point2 Point;&lt;br /&gt;
  4    v_Point3 Point;&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    v_Point2 := v_Point1.Times(4);&lt;br /&gt;
  7    v_Point3 := v_Point1.Plus(v_Point2);&lt;br /&gt;
  8    DBMS_OUTPUT.PUT_LINE(&amp;quot;Point 2: &amp;quot; || v_Point2.ToString);&lt;br /&gt;
  9    DBMS_OUTPUT.PUT_LINE(&amp;quot;Point 3: &amp;quot; || v_Point3.ToString);&lt;br /&gt;
 10    DBMS_OUTPUT.PUT_LINE(&amp;quot;Distance between origin and point 1: &amp;quot; ||&lt;br /&gt;
 11      v_Point1.Distance);&lt;br /&gt;
 12    DBMS_OUTPUT.PUT_LINE(&amp;quot;Distance between point 1 and point 2: &amp;quot; ||&lt;br /&gt;
 13      v_Point1.Distance(v_Point2));&lt;br /&gt;
 14  END;&lt;br /&gt;
 15  /&lt;br /&gt;
Point 2: (4, 8)&lt;br /&gt;
Point 3: (5, 10)&lt;br /&gt;
Distance between origin and point 1: 2.23606797749978969640917366873127623544&lt;br /&gt;
Distance between point 1 and point 2: 6.70820393249936908922752100619382870632&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;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE point_object_tab OF Point;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE point_column_tab (&lt;br /&gt;
  2    key VARCHAR2(20),&lt;br /&gt;
  3    value Point);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_Point Point := Point(1, 1);&lt;br /&gt;
  3    v_NewPoint Point;&lt;br /&gt;
  4    v_Key point_column_tab.key%TYPE;&lt;br /&gt;
  5    v_XCoord NUMBER;&lt;br /&gt;
  6    v_YCoord NUMBER;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    INSERT INTO point_object_tab VALUES (v_Point);&lt;br /&gt;
  9    INSERT INTO point_column_tab VALUES (&amp;quot;My Point&amp;quot;, v_Point);&lt;br /&gt;
 10&lt;br /&gt;
 11    SELECT *&lt;br /&gt;
 12      INTO v_XCoord, v_YCoord&lt;br /&gt;
 13      FROM point_object_tab;&lt;br /&gt;
 14    DBMS_OUTPUT.PUT_LINE(&amp;quot;Relational query of object table: &amp;quot; ||&lt;br /&gt;
 15      v_XCoord || &amp;quot;, &amp;quot; || v_YCoord);&lt;br /&gt;
 16&lt;br /&gt;
 17    SELECT VALUE(ot)&lt;br /&gt;
 18      INTO v_NewPoint&lt;br /&gt;
 19      FROM point_object_tab ot;&lt;br /&gt;
 20    DBMS_OUTPUT.PUT_LINE(&amp;quot;object table: &amp;quot; || v_NewPoint.ToString);&lt;br /&gt;
 21&lt;br /&gt;
 22    SELECT key, value&lt;br /&gt;
 23      INTO v_Key, v_NewPoint&lt;br /&gt;
 24      FROM point_column_tab;&lt;br /&gt;
 25    DBMS_OUTPUT.PUT_LINE(&amp;quot;column table: &amp;quot; || v_NewPoint.ToString);&lt;br /&gt;
 26&lt;br /&gt;
 27  END;&lt;br /&gt;
 28  /&lt;br /&gt;
Relational query of object table: 1, 1&lt;br /&gt;
object table: (1, 1)&lt;br /&gt;
column table: (1, 1)&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_PointRef REF Point;&lt;br /&gt;
  3    v_Point Point;&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    DELETE FROM point_object_tab;&lt;br /&gt;
  6&lt;br /&gt;
  7    INSERT INTO point_object_tab (x, y)&lt;br /&gt;
  8      VALUES (0, 0);&lt;br /&gt;
  9    INSERT INTO point_object_tab (x, y)&lt;br /&gt;
 10      VALUES (1, 1);&lt;br /&gt;
 11&lt;br /&gt;
 12    SELECT REF(ot)&lt;br /&gt;
 13      INTO v_PointRef&lt;br /&gt;
 14      FROM point_object_tab ot&lt;br /&gt;
 15      WHERE x = 1 AND y = 1;&lt;br /&gt;
 16&lt;br /&gt;
 17    SELECT DEREF(v_PointRef)&lt;br /&gt;
 18      INTO v_Point&lt;br /&gt;
 19      FROM dual;&lt;br /&gt;
 20    DBMS_OUTPUT.PUT_LINE(&amp;quot;Selected reference &amp;quot; ||&lt;br /&gt;
 21      v_Point.ToString);&lt;br /&gt;
 22&lt;br /&gt;
 23    INSERT INTO point_object_tab ot (x, y)&lt;br /&gt;
 24      VALUES (10, 10)&lt;br /&gt;
 25      RETURNING REF(ot) INTO v_PointRef;&lt;br /&gt;
 26  END;&lt;br /&gt;
 27  /&lt;br /&gt;
Selected reference (1, 1)&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DROP TABLE point_column_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; DROP TABLE point_object_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Display the New Table (SELECT * and SELECT by Column Name)==&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_obj as OBJECT(&lt;br /&gt;
  2        street VARCHAR2(20),&lt;br /&gt;
  3        city VARCHAR2(20),&lt;br /&gt;
  4        state CHAR(2),&lt;br /&gt;
  5        zip CHAR(5));&lt;br /&gt;
  6  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; CREATE TABLE emp (empno   NUMBER(3),&lt;br /&gt;
  2                    name    VARCHAR2(20),&lt;br /&gt;
  3                    address ADDRESS_OBJ);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp VALUES (101, &amp;quot;Adam&amp;quot;, ADDRESS_OBJ(&amp;quot;1 A St.&amp;quot;,&amp;quot;Mobile&amp;quot;,&amp;quot;AL&amp;quot;,&amp;quot;36608&amp;quot;));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM emp;&lt;br /&gt;
     EMPNO NAME&lt;br /&gt;
---------- --------------------&lt;br /&gt;
ADDRESS(STREET, CITY, STATE, ZIP)&lt;br /&gt;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
       101 Adam&lt;br /&gt;
ADDRESS_OBJ(&amp;quot;1 A St.&amp;quot;, &amp;quot;Mobile&amp;quot;, &amp;quot;AL&amp;quot;, &amp;quot;36608&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;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;
==Query data from table based on 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;
SQL&amp;gt; CREATE OR REPLACE TYPE address_obj as OBJECT(&lt;br /&gt;
  2        street VARCHAR2(20),&lt;br /&gt;
  3        city VARCHAR2(20),&lt;br /&gt;
  4        state CHAR(2),&lt;br /&gt;
  5        zip CHAR(5));&lt;br /&gt;
  6  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE address_table OF ADDRESS_OBJ;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO address_table VALUES (&amp;quot;4 D St.&amp;quot;, &amp;quot;Gulf Breeze&amp;quot;,&amp;quot;FL&amp;quot;,&amp;quot;32563&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT *&lt;br /&gt;
  2  FROM address_table;&lt;br /&gt;
STREET               CITY                 ST ZIP&lt;br /&gt;
-------------------- -------------------- -- -----&lt;br /&gt;
4 D St.              Gulf Breeze          FL 32563&lt;br /&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; drop table address_table;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;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;
==Query object table==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace&lt;br /&gt;
  2  type address as object(&lt;br /&gt;
  3   id number,&lt;br /&gt;
  4   street varchar2(100),&lt;br /&gt;
  5   state varchar2(2),&lt;br /&gt;
  6   zipcode varchar(11)&lt;br /&gt;
  7  )&lt;br /&gt;
  8  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table address_table of address&lt;br /&gt;
  2  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into address_table values ( 1, &amp;quot;Oracle Way&amp;quot;, &amp;quot;VA&amp;quot;, &amp;quot;21090&amp;quot; )&lt;br /&gt;
  2  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from address_table;&lt;br /&gt;
&lt;br /&gt;
        ID&lt;br /&gt;
----------&lt;br /&gt;
STREET&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
ST ZIPCODE&lt;br /&gt;
-- -----------&lt;br /&gt;
         1&lt;br /&gt;
Oracle Way&lt;br /&gt;
VA 21090&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; drop table address_table;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SELECTing Individual Columns in TCROs==&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_obj as OBJECT(&lt;br /&gt;
  2        street VARCHAR2(20),&lt;br /&gt;
  3        city VARCHAR2(20),&lt;br /&gt;
  4        state CHAR(2),&lt;br /&gt;
  5        zip CHAR(5));&lt;br /&gt;
  6  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE address_table OF ADDRESS_OBJ;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE client (name VARCHAR2(20),&lt;br /&gt;
  2    address REF address_obj scope is address_table);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO address_table VALUES (ADDRESS_OBJ(&amp;quot;1 A St.&amp;quot;,&amp;quot;Mobile&amp;quot;,&amp;quot;AL&amp;quot;,&amp;quot;36608&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; INSERT INTO client SELECT &amp;quot;Walsh&amp;quot;, REF(aa) FROM address_table aa;&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- SELECTing Individual Columns in TCROs&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM client;&lt;br /&gt;
NAME      ADDRESS&lt;br /&gt;
--------- --------------------------------------------------&lt;br /&gt;
Walsh     0000220208589A813178324DF39D575B3701C24CE19751BEFE&lt;br /&gt;
          0AF34AC18C9B571EDA8D0418&lt;br /&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; drop table client;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table address_table;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;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;
==SELECT Only One Column in the Composite==&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; -- SELECTing Only One Column in the Composite&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE address_obj as OBJECT(&lt;br /&gt;
  2        street VARCHAR2(20),&lt;br /&gt;
  3        city VARCHAR2(20),&lt;br /&gt;
  4        state CHAR(2),&lt;br /&gt;
  5        zip CHAR(5));&lt;br /&gt;
  6  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE emp (empno   NUMBER(3),&lt;br /&gt;
  2                    name    VARCHAR2(20),&lt;br /&gt;
  3                    address ADDRESS_OBJ);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp VALUES (101, &amp;quot;Adam&amp;quot;, ADDRESS_OBJ(&amp;quot;1 A St.&amp;quot;,&amp;quot;Mobile&amp;quot;,&amp;quot;AL&amp;quot;,&amp;quot;36608&amp;quot;));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; COLUMN name FORMAT a9&lt;br /&gt;
SQL&amp;gt; COLUMN empno FORMAT 999999&lt;br /&gt;
SQL&amp;gt; COLUMN address FORMAT a50&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT name, e.address.city FROM emp e;&lt;br /&gt;
NAME      ADDRESS.CITY&lt;br /&gt;
--------- --------------------&lt;br /&gt;
Adam      Mobile&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&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;
==Select the object type from the table, rather than the columns.==&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 TABLE rel_tab (&lt;br /&gt;
  2    f1 NUMBER,&lt;br /&gt;
  3    f2 VARCHAR2(50)&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE objType AS OBJECT (&lt;br /&gt;
  2    f1 NUMBER,&lt;br /&gt;
  3    f2 VARCHAR2(50)&lt;br /&gt;
  4  );&lt;br /&gt;
  5  /&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 TABLE obj_tab OF objType;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_Row obj_tab%ROWTYPE;&lt;br /&gt;
  3    CURSOR c_AllRows IS&lt;br /&gt;
  4      SELECT VALUE(o) FROM obj_tab o;&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    OPEN c_AllRows;&lt;br /&gt;
  7    LOOP&lt;br /&gt;
  8      FETCH c_AllRows INTO v_Row;&lt;br /&gt;
  9      EXIT WHEN c_AllRows%NOTFOUND;&lt;br /&gt;
 10      DBMS_OUTPUT.PUT_LINE(v_Row.f1 || &amp;quot; &amp;quot; || v_Row.f2);&lt;br /&gt;
 11    END LOOP;&lt;br /&gt;
 12    CLOSE c_AllRows;&lt;br /&gt;
 13  END;&lt;br /&gt;
 14  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table rel_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table obj_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SELECT with a WHERE Clause==&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; --SELECT with a WHERE Clause&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE address_obj as OBJECT(&lt;br /&gt;
  2        street VARCHAR2(20),&lt;br /&gt;
  3        city VARCHAR2(20),&lt;br /&gt;
  4        state CHAR(2),&lt;br /&gt;
  5        zip CHAR(5));&lt;br /&gt;
  6  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE emp (empno   NUMBER(3),&lt;br /&gt;
  2                    name    VARCHAR2(20),&lt;br /&gt;
  3                    address ADDRESS_OBJ);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp VALUES (101, &amp;quot;Adam&amp;quot;, ADDRESS_OBJ(&amp;quot;1 A St.&amp;quot;,&amp;quot;Mobile&amp;quot;,&amp;quot;AL&amp;quot;,&amp;quot;36608&amp;quot;));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; COLUMN name FORMAT a9&lt;br /&gt;
SQL&amp;gt; COLUMN empno FORMAT 999999&lt;br /&gt;
SQL&amp;gt; COLUMN address FORMAT a50&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT name, e.address.city FROM emp e WHERE e.address.state = &amp;quot;AL&amp;quot;;&lt;br /&gt;
NAME      ADDRESS.CITY&lt;br /&gt;
--------- --------------------&lt;br /&gt;
Adam      Mobile&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;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 %ROWTYPE to select from the relational table.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE rel_tab (&lt;br /&gt;
  2    f1 NUMBER,&lt;br /&gt;
  3    f2 VARCHAR2(50)&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE objType AS OBJECT (&lt;br /&gt;
  2    f1 NUMBER,&lt;br /&gt;
  3    f2 VARCHAR2(50)&lt;br /&gt;
  4  );&lt;br /&gt;
  5  /&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 TABLE obj_tab OF objType;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_Row rel_tab%ROWTYPE;&lt;br /&gt;
  3    CURSOR c_AllRows IS&lt;br /&gt;
  4      SELECT * FROM rel_tab;&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    OPEN c_AllRows;&lt;br /&gt;
  7    LOOP&lt;br /&gt;
  8      FETCH c_AllRows INTO v_Row;&lt;br /&gt;
  9      EXIT WHEN c_AllRows%NOTFOUND;&lt;br /&gt;
 10      DBMS_OUTPUT.PUT_LINE(v_Row.f1 || &amp;quot; &amp;quot; || v_Row.f2);&lt;br /&gt;
 11    END LOOP;&lt;br /&gt;
 12    CLOSE c_AllRows;&lt;br /&gt;
 13  END;&lt;br /&gt;
 14  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table rel_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table obj_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;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 the function we created: use the table alias in our SELECT as well as the qualifier==&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 aobj AS object (&lt;br /&gt;
  2                    state CHAR(2),&lt;br /&gt;
  3                    amt NUMBER(5),&lt;br /&gt;
  4&lt;br /&gt;
  5                    MEMBER FUNCTION mult (times in number) RETURN number,&lt;br /&gt;
  6                    PRAGMA RESTRICT_REFERENCES(mult, WNDS));&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 BODY aobj AS&lt;br /&gt;
  2    MEMBER FUNCTION mult (times in number) RETURN number&lt;br /&gt;
  3    IS&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5      RETURN times * self.amt; /* SEE BELOW */&lt;br /&gt;
  6    END;&lt;br /&gt;
  7  END;&lt;br /&gt;
  8  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE aobjtable (arow aobj);&lt;br /&gt;
Table 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; INSERT INTO aobjtable VALUES (aobj(&amp;quot;FL&amp;quot;,25));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO aobjtable VALUES (aobj(&amp;quot;AL&amp;quot;,35));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO aobjtable VALUES (aobj(&amp;quot;OH&amp;quot;,15));&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- Use the function we created: use the table alias in our SELECT as well as the qualifier, arow:&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT x.arow.state, x.arow.amt, x.arow.mult(2)&lt;br /&gt;
  2  FROM aobjtable x;&lt;br /&gt;
AR   AROW.AMT X.AROW.MULT(2)&lt;br /&gt;
-- ---------- --------------&lt;br /&gt;
FL         25             50&lt;br /&gt;
AL         35             70&lt;br /&gt;
OH         15             30&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DESC aobjtable;&lt;br /&gt;
 Name                                                                                                  Null?    Type&lt;br /&gt;
 ----------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------&lt;br /&gt;
 AROW                                                                                                   AOBJ&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table aobjtable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;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 * to reference column with user-defined 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 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 or replace type emp_type&lt;br /&gt;
  2    as object&lt;br /&gt;
  3    (empno       number(4),&lt;br /&gt;
  4     ename       varchar2(10),&lt;br /&gt;
  5     job         varchar2(9),&lt;br /&gt;
  6     mgr         number(4),&lt;br /&gt;
  7     hiredate    date,&lt;br /&gt;
  8     sal         number(7, 2),&lt;br /&gt;
  9     comm        number(7, 2)&lt;br /&gt;
 10    );&lt;br /&gt;
 11  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type emp_tab_type as table of emp_type;&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; create table dept_and_emp&lt;br /&gt;
  2    (deptno number(2) primary key,&lt;br /&gt;
  3     dname     varchar2(14),&lt;br /&gt;
  4     loc       varchar2(13),&lt;br /&gt;
  5     emps      emp_tab_type&lt;br /&gt;
  6    )&lt;br /&gt;
  7    nested table emps store as emps_nt;&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 dept_and_emp&lt;br /&gt;
  2    select dept.*,&lt;br /&gt;
  3       CAST( multiset( select empno, ename, job, mgr, hiredate, sal, comm from emp ) AS emp_tab_type )&lt;br /&gt;
  4      from dept&lt;br /&gt;
  5  /&lt;br /&gt;
4 rows created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select d.deptno, d.dname, emp.*&lt;br /&gt;
  2    from dept_and_emp D, table(d.emps) emp&lt;br /&gt;
  3  /&lt;br /&gt;
    DEPTNO DNAME               EMPNO ENAME      JOB              MGR HIREDATE                    SAL    COMM&lt;br /&gt;
---------- -------------- ---------- ---------- --------- ---------- -------------------- ---------- ----------&lt;br /&gt;
    DEPTNO DNAME               EMPNO ENAME      JOB              MGR HIREDATE                    SAL    COMM&lt;br /&gt;
---------- -------------- ---------- ---------- --------- ---------- -------------------- ---------- ----------&lt;br /&gt;
        10 ACCOUNTING           7369 SMITH      CLERK           7902 17-DEC-1980 00:00:00        800&lt;br /&gt;
        10 ACCOUNTING           7499 ALLEN      SALESMAN        7698 20-FEB-1981 00:00:00       1600        300&lt;br /&gt;
        10 ACCOUNTING           7521 WARD       SALESMAN        7698 22-FEB-1981 00:00:00       1250        500&lt;br /&gt;
        10 ACCOUNTING           7566 JONES      MANAGER         7839 02-APR-1981 00:00:00       2975&lt;br /&gt;
        10 ACCOUNTING           7654 MARTIN     SALESMAN        7698 28-SEP-1981 00:00:00       1250       1400&lt;br /&gt;
        10 ACCOUNTING           7698 BLAKE      MANAGER         7839 01-MAY-1981 00:00:00       2850&lt;br /&gt;
        10 ACCOUNTING           7782 CLARK      MANAGER         7839 09-JUN-1981 00:00:00       2450&lt;br /&gt;
        10 ACCOUNTING           7788 SCOTT      ANALYST         7566 09-DEC-1982 00:00:00       3000&lt;br /&gt;
        10 ACCOUNTING           7839 KING       PRESIDENT            17-NOV-1981 00:00:00       5000&lt;br /&gt;
        10 ACCOUNTING           7844 TURNER     SALESMAN        7698 08-SEP-1981 00:00:00       1500          0&lt;br /&gt;
        10 ACCOUNTING           7876 ADAMS      CLERK           7788 12-JAN-1983 00:00:00       1100&lt;br /&gt;
        10 ACCOUNTING           7900 JAMES      CLERK           7698 03-DEC-1981 00:00:00        950&lt;br /&gt;
        10 ACCOUNTING           7902 FORD       ANALYST         7566 03-DEC-1981 00:00:00       3000&lt;br /&gt;
        10 ACCOUNTING           7934 MILLER     CLERK           7782 23-JAN-1982 00:00:00       1300&lt;br /&gt;
        20 RESEARCH             7369 SMITH      CLERK           7902 17-DEC-1980 00:00:00        800&lt;br /&gt;
        20 RESEARCH             7499 ALLEN      SALESMAN        7698 20-FEB-1981 00:00:00       1600        300&lt;br /&gt;
        20 RESEARCH             7521 WARD       SALESMAN        7698 22-FEB-1981 00:00:00       1250        500&lt;br /&gt;
        20 RESEARCH             7566 JONES      MANAGER         7839 02-APR-1981 00:00:00       2975&lt;br /&gt;
        20 RESEARCH             7654 MARTIN     SALESMAN        7698 28-SEP-1981 00:00:00       1250       1400&lt;br /&gt;
        20 RESEARCH             7698 BLAKE      MANAGER         7839 01-MAY-1981 00:00:00       2850&lt;br /&gt;
        20 RESEARCH             7782 CLARK      MANAGER         7839 09-JUN-1981 00:00:00       2450&lt;br /&gt;
        20 RESEARCH             7788 SCOTT      ANALYST         7566 09-DEC-1982 00:00:00       3000&lt;br /&gt;
        20 RESEARCH             7839 KING       PRESIDENT            17-NOV-1981 00:00:00       5000&lt;br /&gt;
        20 RESEARCH             7844 TURNER     SALESMAN        7698 08-SEP-1981 00:00:00       1500          0&lt;br /&gt;
        20 RESEARCH             7876 ADAMS      CLERK           7788 12-JAN-1983 00:00:00       1100&lt;br /&gt;
        20 RESEARCH             7900 JAMES      CLERK           7698 03-DEC-1981 00:00:00        950&lt;br /&gt;
        20 RESEARCH             7902 FORD       ANALYST         7566 03-DEC-1981 00:00:00       3000&lt;br /&gt;
        20 RESEARCH             7934 MILLER     CLERK           7782 23-JAN-1982 00:00:00       1300&lt;br /&gt;
        30 SALES                7369 SMITH      CLERK           7902 17-DEC-1980 00:00:00        800&lt;br /&gt;
        30 SALES                7499 ALLEN      SALESMAN        7698 20-FEB-1981 00:00:00       1600        300&lt;br /&gt;
        30 SALES                7521 WARD       SALESMAN        7698 22-FEB-1981 00:00:00       1250        500&lt;br /&gt;
        30 SALES                7566 JONES      MANAGER         7839 02-APR-1981 00:00:00       2975&lt;br /&gt;
        30 SALES                7654 MARTIN     SALESMAN        7698 28-SEP-1981 00:00:00       1250       1400&lt;br /&gt;
        30 SALES                7698 BLAKE      MANAGER         7839 01-MAY-1981 00:00:00       2850&lt;br /&gt;
        30 SALES                7782 CLARK      MANAGER         7839 09-JUN-1981 00:00:00       2450&lt;br /&gt;
        30 SALES                7788 SCOTT      ANALYST         7566 09-DEC-1982 00:00:00       3000&lt;br /&gt;
        30 SALES                7839 KING       PRESIDENT            17-NOV-1981 00:00:00       5000&lt;br /&gt;
        30 SALES                7844 TURNER     SALESMAN        7698 08-SEP-1981 00:00:00       1500          0&lt;br /&gt;
        30 SALES                7876 ADAMS      CLERK           7788 12-JAN-1983 00:00:00       1100&lt;br /&gt;
        30 SALES                7900 JAMES      CLERK           7698 03-DEC-1981 00:00:00        950&lt;br /&gt;
        30 SALES                7902 FORD       ANALYST         7566 03-DEC-1981 00:00:00       3000&lt;br /&gt;
        30 SALES                7934 MILLER     CLERK           7782 23-JAN-1982 00:00:00       1300&lt;br /&gt;
        40 OPERATIONS           7369 SMITH      CLERK           7902 17-DEC-1980 00:00:00        800&lt;br /&gt;
        40 OPERATIONS           7499 ALLEN      SALESMAN        7698 20-FEB-1981 00:00:00       1600        300&lt;br /&gt;
        40 OPERATIONS           7521 WARD       SALESMAN        7698 22-FEB-1981 00:00:00       1250        500&lt;br /&gt;
        40 OPERATIONS           7566 JONES      MANAGER         7839 02-APR-1981 00:00:00       2975&lt;br /&gt;
        40 OPERATIONS           7654 MARTIN     SALESMAN        7698 28-SEP-1981 00:00:00       1250       1400&lt;br /&gt;
        40 OPERATIONS           7698 BLAKE      MANAGER         7839 01-MAY-1981 00:00:00       2850&lt;br /&gt;
        40 OPERATIONS           7782 CLARK      MANAGER         7839 09-JUN-1981 00:00:00       2450&lt;br /&gt;
        40 OPERATIONS           7788 SCOTT      ANALYST         7566 09-DEC-1982 00:00:00       3000&lt;br /&gt;
        40 OPERATIONS           7839 KING       PRESIDENT            17-NOV-1981 00:00:00       5000&lt;br /&gt;
        40 OPERATIONS           7844 TURNER     SALESMAN        7698 08-SEP-1981 00:00:00       1500          0&lt;br /&gt;
        40 OPERATIONS           7876 ADAMS      CLERK           7788 12-JAN-1983 00:00:00       1100&lt;br /&gt;
        40 OPERATIONS           7900 JAMES      CLERK           7698 03-DEC-1981 00:00:00        950&lt;br /&gt;
        40 OPERATIONS           7902 FORD       ANALYST         7566 03-DEC-1981 00:00:00       3000&lt;br /&gt;
        40 OPERATIONS           7934 MILLER     CLERK           7782 23-JAN-1982 00:00:00       1300&lt;br /&gt;
56 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table dept cascade constraints;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table dept_and_emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop type emp_tab_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop type emp_type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;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 type member function in select statement==&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&lt;br /&gt;
  2  type person as object (&lt;br /&gt;
  3   first_name varchar2(100),&lt;br /&gt;
  4   last_name varchar2(100),&lt;br /&gt;
  5   dob date,&lt;br /&gt;
  6   phone varchar2(100),&lt;br /&gt;
  7   member function get_last_name return varchar2,&lt;br /&gt;
  8   member function get_phone_number return varchar2 )&lt;br /&gt;
  9  not final&lt;br /&gt;
 10  /&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&lt;br /&gt;
  2  type body person as&lt;br /&gt;
  3    member function get_last_name return varchar2 is&lt;br /&gt;
  4    begin&lt;br /&gt;
  5      return self.last_name;&lt;br /&gt;
  6    end;&lt;br /&gt;
  7    member function get_phone_number return varchar2 is&lt;br /&gt;
  8    begin&lt;br /&gt;
  9      return self.phone;&lt;br /&gt;
 10    end;&lt;br /&gt;
 11  end;&lt;br /&gt;
 12  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table person_table( p person );&lt;br /&gt;
Table 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&lt;br /&gt;
  2  type new_employee under person (&lt;br /&gt;
  3    empno number,&lt;br /&gt;
  4    hiredate date,&lt;br /&gt;
  5    work_phone varchar2(100),&lt;br /&gt;
  6    overriding member function get_phone_number return varchar2,&lt;br /&gt;
  7    member function get_home_phone_number return varchar2 )&lt;br /&gt;
  8  not final&lt;br /&gt;
  9  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace&lt;br /&gt;
  2  type body new_employee as&lt;br /&gt;
  3    overriding member function get_phone_number return varchar2 is&lt;br /&gt;
  4    begin&lt;br /&gt;
  5      return self.work_phone;&lt;br /&gt;
  6    end;&lt;br /&gt;
  7    member function get_home_phone_number return varchar2 is&lt;br /&gt;
  8    begin&lt;br /&gt;
  9      return self.phone;&lt;br /&gt;
 10    end;&lt;br /&gt;
 11  end;&lt;br /&gt;
 12  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;  select x.p.get_last_name() last_name,&lt;br /&gt;
  2           x.p.phone phone,&lt;br /&gt;
  3           treat( x.p as new_employee ).work_phone work_phone,&lt;br /&gt;
  4           x.p.get_phone_number() &amp;quot;GET_PHONE_NUMBER()&amp;quot;,&lt;br /&gt;
  5           treat( x.p as new_employee ).get_phone_number() treat_as_new_employee&lt;br /&gt;
  6      from person_table x&lt;br /&gt;
  7    /&lt;br /&gt;
no rows selected&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table person_table;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type new_employee;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type person;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>