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

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/Select&amp;diff=2969&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/Object_Oriented/Select&amp;diff=2969&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/Object_Oriented/Select&amp;diff=2970&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/Object_Oriented/Select&amp;diff=2970&amp;oldid=prev"/>
				<updated>2010-05-26T10:04:34Z</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;== COLUMN Formatting in SELECT for 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;
SQL&amp;gt;&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; 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 (&lt;br /&gt;
  2  empno NUMBER(3),&lt;br /&gt;
  3  name VARCHAR2(20),&lt;br /&gt;
  4  address ADDRESS_OBJ);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp VALUES (101, &amp;quot;A&amp;quot;,ADDRESS_OBJ(&amp;quot;1 St.&amp;quot;,&amp;quot;M&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                 ADDRESS(STREET, CITY, STATE, ZIP)&lt;br /&gt;
---------- -------------------- --------------------------------------------------&lt;br /&gt;
       101 A                    ADDRESS_OBJ(&amp;quot;1 St.&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;AL&amp;quot;, &amp;quot;36608&amp;quot;)&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select address from emp;&lt;br /&gt;
ADDRESS(STREET, CITY, STATE, ZIP)&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
ADDRESS_OBJ(&amp;quot;1 St.&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;AL&amp;quot;, &amp;quot;36608&amp;quot;)&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; drop type ADDRESS_OBJ;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;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;
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;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== ORA-00932: inconsistent datatypes: expected REF==&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;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE address AS OBJECT&lt;br /&gt;
  2              (line1 VARCHAR2(20),&lt;br /&gt;
  3               line2 VARCHAR2(20),&lt;br /&gt;
  4               city VARCHAR2(20),&lt;br /&gt;
  5               state_code VARCHAR2(2),&lt;br /&gt;
  6               zip VARCHAR2(13),&lt;br /&gt;
  7    MEMBER FUNCTION get_address RETURN VARCHAR2,&lt;br /&gt;
  8    MEMBER PROCEDURE set_address&lt;br /&gt;
  9              (addressLine1 VARCHAR2,&lt;br /&gt;
 10               addressLine2 VARCHAR2,&lt;br /&gt;
 11               address_city VARCHAR2,&lt;br /&gt;
 12               address_state VARCHAR2,&lt;br /&gt;
 13               address_zip VARCHAR2)&lt;br /&gt;
 14  );&lt;br /&gt;
 15  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY address AS&lt;br /&gt;
  2    MEMBER FUNCTION get_address RETURN VARCHAR2&lt;br /&gt;
  3    IS&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5      RETURN (SELF.line1||&amp;quot; &amp;quot;||SELF.line2||&amp;quot; &amp;quot;||SELF.city||&amp;quot;, &amp;quot;||SELF.state_code||&amp;quot; &amp;quot;||SELF.zip);&lt;br /&gt;
  6    END get_address;&lt;br /&gt;
  7    MEMBER PROCEDURE set_address (addressLine1 VARCHAR2,&lt;br /&gt;
  8                  addressLine2 VARCHAR2,&lt;br /&gt;
  9                  address_city VARCHAR2,&lt;br /&gt;
 10                  address_state VARCHAR2,&lt;br /&gt;
 11                  address_zip VARCHAR2)&lt;br /&gt;
 12    IS&lt;br /&gt;
 13    BEGIN&lt;br /&gt;
 14      line1 :=addressLine1;&lt;br /&gt;
 15      line2 :=addressLine2;&lt;br /&gt;
 16      city :=address_city;&lt;br /&gt;
 17      state_code :=address_state;&lt;br /&gt;
 18      zip :=address_zip;&lt;br /&gt;
 19    END set_address;&lt;br /&gt;
 20  END;&lt;br /&gt;
 21  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt; CREATE TABLE employee&lt;br /&gt;
  2  (empid number(10)PRIMARY KEY,&lt;br /&gt;
  3   lastname varchar2(30)NOT NULL,&lt;br /&gt;
  4   firstname varchar2(30)NOT NULL,&lt;br /&gt;
  5   middle_initial varchar2(2),&lt;br /&gt;
  6   emp_address REF address);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    addressValue address;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    SELECT emp_address INTO addressValue FROM employee WHERE lastname =&amp;quot;LAKSHMAN&amp;quot;;&lt;br /&gt;
  5    DBMS_OUTPUT.PUT_LINE(&amp;quot;The address of the employee LAKSHMAN is&amp;quot;);&lt;br /&gt;
  6    DBMS_OUTPUT.PUT_LINE(addressValue.line1||&amp;quot; &amp;quot;||addressValue.line2);&lt;br /&gt;
  7    DBMS_OUTPUT.PUT_LINE(addressValue.city||&amp;quot;, &amp;quot;||addressValue.state_code||&amp;quot; &amp;quot;||addressValue.zip);&lt;br /&gt;
  8  END;&lt;br /&gt;
  9  /&lt;br /&gt;
  SELECT emp_address INTO addressValue FROM employee WHERE lastname =&amp;quot;LAKSHMAN&amp;quot;;&lt;br /&gt;
         *&lt;br /&gt;
ERROR at line 4:&lt;br /&gt;
ORA-06550: line 4, column 10:&lt;br /&gt;
PL/SQL: ORA-00932: inconsistent datatypes: expected REF&lt;br /&gt;
sqle.ADDRESS got sqle.ADDRESS&lt;br /&gt;
ORA-06550: line 4, column 3:&lt;br /&gt;
PL/SQL: SQL Statement ignored&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM employee e WHERE e.emp_address.city =&amp;quot;Vancouver&amp;quot;;&lt;br /&gt;
no rows selected&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT e.emp_address.get_address() FROM employee e;&lt;br /&gt;
no rows selected&lt;br /&gt;
SQL&amp;gt;&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;
== Querying Rows from the 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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or Replace TYPE ProductType AS OBJECT (&lt;br /&gt;
  2    id          NUMBER,&lt;br /&gt;
  3    name        VARCHAR2(15),&lt;br /&gt;
  4    description VARCHAR2(22),&lt;br /&gt;
  5    price       NUMBER(5, 2),&lt;br /&gt;
  6    days_valid  NUMBER&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 object_products OF ProductType&lt;br /&gt;
  2  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO object_products (&lt;br /&gt;
  2    id, name, description, price, days_valid&lt;br /&gt;
  3  ) VALUES (&lt;br /&gt;
  4    2, &amp;quot;AAA&amp;quot;, &amp;quot;BBB&amp;quot;, 2.99, 5&lt;br /&gt;
  5  );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from object_products;&lt;br /&gt;
 ID NAME            DESCRIPTION                 PRICE DAYS_VALID&lt;br /&gt;
--- --------------- ---------------------- ---------- ----------&lt;br /&gt;
  2 AAA             BBB                          2.99          5&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table object_products;&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;
== Query table 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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type Address_Type&lt;br /&gt;
  2  as object&lt;br /&gt;
  3  (  street_addr1   varchar2(25),&lt;br /&gt;
  4     street_addr2   varchar2(25),&lt;br /&gt;
  5     city           varchar2(30),&lt;br /&gt;
  6     state          varchar2(2),&lt;br /&gt;
  7     zip_code       number&lt;br /&gt;
  8  )&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  ( name           varchar2(10),&lt;br /&gt;
  3    home_address   address_type,&lt;br /&gt;
  4    work_address   address_type&lt;br /&gt;
  5  )&lt;br /&gt;
  6  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2      l_home_address address_type;&lt;br /&gt;
  3      l_work_address address_type;&lt;br /&gt;
  4  begin&lt;br /&gt;
  5      l_home_address := Address_Type( &amp;quot;1 Street&amp;quot;, null,&amp;quot;R&amp;quot;, &amp;quot;VA&amp;quot;, 45678 );&lt;br /&gt;
  6      l_work_address := Address_Type( &amp;quot;1 Way&amp;quot;, null,&amp;quot;R&amp;quot;, &amp;quot;CA&amp;quot;, 23456 );&lt;br /&gt;
  7&lt;br /&gt;
  8      insert into people( name, home_address, work_address )values ( &amp;quot;Tom Kyte&amp;quot;, l_home_address, l_work_address );&lt;br /&gt;
  9  end;&lt;br /&gt;
 10  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; column &amp;quot;HOME_ADDRESS.STATE&amp;quot; format a20&lt;br /&gt;
SQL&amp;gt; column &amp;quot;WORK_ADDRESS.STATE&amp;quot; format a20&lt;br /&gt;
SQL&amp;gt; select name, P.home_address.state, P.work_address.state from people P&lt;br /&gt;
  2  /&lt;br /&gt;
&lt;br /&gt;
NAME       HOME_ADDRESS.STATE   WORK_ADDRESS.STATE&lt;br /&gt;
---------- -------------------- --------------------&lt;br /&gt;
Tom Kyte   VA                   CA&lt;br /&gt;
SQL&amp;gt; drop table people;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop type Address_Type;&lt;br /&gt;
Type dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Select an individual column object from a table==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE Or Replace TYPE ProductType AS OBJECT (&lt;br /&gt;
  2    id          NUMBER,&lt;br /&gt;
  3    name        VARCHAR2(15),&lt;br /&gt;
  4    description VARCHAR2(22),&lt;br /&gt;
  5    price       NUMBER(5, 2),&lt;br /&gt;
  6    days_valid  NUMBER&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 products (&lt;br /&gt;
  2    product           ProductType,&lt;br /&gt;
  3    count NUMBER&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO products (product,count) VALUES (&lt;br /&gt;
  2            ProductType(1, &amp;quot;AA&amp;quot;, &amp;quot;BBB&amp;quot;, 3.95, 10),50&lt;br /&gt;
  3  );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO products (product,count) VALUES (&lt;br /&gt;
  2            ProductType(2, &amp;quot;CC&amp;quot;, &amp;quot;DDDD&amp;quot;, 2.99, 5),25&lt;br /&gt;
  3  );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT p.product&lt;br /&gt;
  2  FROM products p&lt;br /&gt;
  3  WHERE p.product.id = 1;&lt;br /&gt;
PRODUCT(ID, NAME, DESCRIPTION, PRICE, DAYS_VALID)&lt;br /&gt;
---------------------------------------------------&lt;br /&gt;
PRODUCTTYPE(1, &amp;quot;AA&amp;quot;, &amp;quot;BBB&amp;quot;, 3.95, 10)&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table products;&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;
== SELECTing 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;
SQL&amp;gt;&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 (&lt;br /&gt;
  2  empno NUMBER(3),&lt;br /&gt;
  3  name VARCHAR2(20),&lt;br /&gt;
  4  address ADDRESS_OBJ)&lt;br /&gt;
  5  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp VALUES (101, &amp;quot;A&amp;quot;,ADDRESS_OBJ(&amp;quot;1 St.&amp;quot;,&amp;quot;M&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                 ADDRESS(STREET, CITY, STATE, ZIP)&lt;br /&gt;
---------- -------------------- --------------------------------------------------&lt;br /&gt;
       101 A                    ADDRESS_OBJ(&amp;quot;1 St.&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;AL&amp;quot;, &amp;quot;36608&amp;quot;)&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select address from emp;&lt;br /&gt;
ADDRESS(STREET, CITY, STATE, ZIP)&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
ADDRESS_OBJ(&amp;quot;1 St.&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;AL&amp;quot;, &amp;quot;36608&amp;quot;)&lt;br /&gt;
SQL&amp;gt; SELECT name, e.address.city&lt;br /&gt;
  2  FROM emp e;&lt;br /&gt;
NAME                 ADDRESS.CITY&lt;br /&gt;
-------------------- --------------------&lt;br /&gt;
A                    M&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; drop type ADDRESS_OBJ;&lt;br /&gt;
Type 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;
== Selecting Rows from the Table with object type column==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE Or Replace TYPE ProductType AS OBJECT (&lt;br /&gt;
  2    id          NUMBER,&lt;br /&gt;
  3    name        VARCHAR2(15),&lt;br /&gt;
  4    description VARCHAR2(22),&lt;br /&gt;
  5    price       NUMBER(5, 2),&lt;br /&gt;
  6    days_valid  NUMBER&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 products (&lt;br /&gt;
  2    product           ProductType,&lt;br /&gt;
  3    count NUMBER&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO products (product,count) VALUES (&lt;br /&gt;
  2            ProductType(2, &amp;quot;CC&amp;quot;, &amp;quot;DDDD&amp;quot;, 2.99, 5),25&lt;br /&gt;
  3  );&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select * from products;&lt;br /&gt;
PRODUCT(ID, NAME, DESCRIPTION, PRICE, DAYS_VALID)       COUNT&lt;br /&gt;
----------&lt;br /&gt;
PRODUCTTYPE(2, &amp;quot;CC&amp;quot;, &amp;quot;DDDD&amp;quot;, 2.99, 5)                   25&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table products;&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 table function to convert type to a &amp;quot;table&amp;quot;==&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 myRecordType as object&lt;br /&gt;
  2  ( seq int,&lt;br /&gt;
  3    a int,&lt;br /&gt;
  4    b varchar2(10),&lt;br /&gt;
  5    c date&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;&lt;br /&gt;
SQL&amp;gt; create or replace type myTableType&lt;br /&gt;
  2  as table of myRecordType&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace function my_function return myTableType&lt;br /&gt;
  2  is&lt;br /&gt;
  3      l_data myTableType;&lt;br /&gt;
  4  begin&lt;br /&gt;
  5      l_data := myTableType();&lt;br /&gt;
  6&lt;br /&gt;
  7      for i in 1..5&lt;br /&gt;
  8      loop&lt;br /&gt;
  9          l_data.extend;&lt;br /&gt;
 10          l_data(i) := myRecordType( i, i, &amp;quot;row &amp;quot; || i, sysdate+i );&lt;br /&gt;
 11      end loop;&lt;br /&gt;
 12      return l_data;&lt;br /&gt;
 13  end;&lt;br /&gt;
 14  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select *&lt;br /&gt;
  2    from TABLE ( cast( my_function() as mytableType ) )&lt;br /&gt;
  3   where c &amp;gt; sysdate+1&lt;br /&gt;
  4   order by seq desc&lt;br /&gt;
  5  /&lt;br /&gt;
&lt;br /&gt;
       SEQ          A B          C&lt;br /&gt;
---------- ---------- ---------- ---------&lt;br /&gt;
         5          5 row 5      30-JUL-08&lt;br /&gt;
         4          4 row 4      29-JUL-08&lt;br /&gt;
         3          3 row 3      28-JUL-08&lt;br /&gt;
         2          2 row 2      27-JUL-08&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop type myTableType;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop type myRecordType;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Use user-defined type to combine query logic==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type 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;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>