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

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Object_Oriented/Member_Function&amp;diff=2984&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/Member_Function&amp;diff=2984&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/Member_Function&amp;diff=2985&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/Member_Function&amp;diff=2985&amp;oldid=prev"/>
				<updated>2010-05-26T10:04:45Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A sample object type with a MAP member function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE myType AUTHID CURRENT_USER IS OBJECT&lt;br /&gt;
  2  ( my_number NUMBER&lt;br /&gt;
  3  , CONSTRUCTOR FUNCTION myType RETURN SELF AS RESULT&lt;br /&gt;
  4  , CONSTRUCTOR FUNCTION myType( my_number NUMBER )RETURN SELF AS RESULT&lt;br /&gt;
  5  , MEMBER PROCEDURE print_instance_variable&lt;br /&gt;
  6  , MAP MEMBER FUNCTION equals RETURN NUMBER )INSTANTIABLE NOT FINAL;&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 myType AS&lt;br /&gt;
  2    CONSTRUCTOR FUNCTION myType&lt;br /&gt;
  3    RETURN SELF AS RESULT IS&lt;br /&gt;
  4      my_instance_number NUMBER := 0;&lt;br /&gt;
  5    BEGIN&lt;br /&gt;
  6      SELF.my_number := my_instance_number;&lt;br /&gt;
  7      RETURN;&lt;br /&gt;
  8    END;&lt;br /&gt;
  9    CONSTRUCTOR FUNCTION myType( my_number NUMBER )&lt;br /&gt;
 10    RETURN SELF AS RESULT IS&lt;br /&gt;
 11    BEGIN&lt;br /&gt;
 12      SELF.my_number := my_number;&lt;br /&gt;
 13      RETURN;&lt;br /&gt;
 14    END;&lt;br /&gt;
 15    MEMBER PROCEDURE print_instance_variable IS&lt;br /&gt;
 16    BEGIN&lt;br /&gt;
 17      DBMS_OUTPUT.PUT_LINE(&amp;quot;Instance Variable [&amp;quot;||SELF.my_number||&amp;quot;]&amp;quot;);&lt;br /&gt;
 18    END;&lt;br /&gt;
 19    MAP MEMBER FUNCTION equals&lt;br /&gt;
 20    RETURN NUMBER IS&lt;br /&gt;
 21    BEGIN&lt;br /&gt;
 22      RETURN SELF.my_number;&lt;br /&gt;
 23&lt;br /&gt;
 24    END;&lt;br /&gt;
 25&lt;br /&gt;
 26  END;&lt;br /&gt;
 27  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    obj1 myType := myType;&lt;br /&gt;
  3    obj2 myType := myType(1);&lt;br /&gt;
  4&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    obj1.print_instance_variable;&lt;br /&gt;
  7&lt;br /&gt;
  8    obj2.print_instance_variable;&lt;br /&gt;
  9&lt;br /&gt;
 10    IF obj1 = obj2 THEN&lt;br /&gt;
 11      DBMS_OUTPUT.PUT_LINE(&amp;quot;equal.&amp;quot;);&lt;br /&gt;
 12    ELSE&lt;br /&gt;
 13      DBMS_OUTPUT.PUT_LINE(&amp;quot;unequal.&amp;quot;);&lt;br /&gt;
 14    END IF;&lt;br /&gt;
 15&lt;br /&gt;
 16  END;&lt;br /&gt;
 17  /&lt;br /&gt;
Instance Variable [0]&lt;br /&gt;
Instance Variable [1]&lt;br /&gt;
unequal.&lt;br /&gt;
PL/SQL procedure successfully completed.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== A sample object type with an ORDER member function.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE myType AUTHID CURRENT_USER IS OBJECT&lt;br /&gt;
  2  ( my_number NUMBER&lt;br /&gt;
  3  , my_name   VARCHAR2(20 CHAR)&lt;br /&gt;
  4  , CONSTRUCTOR FUNCTION myType RETURN SELF AS RESULT&lt;br /&gt;
  5  , CONSTRUCTOR FUNCTION myType ( my_number NUMBER, my_name   VARCHAR2 )RETURN SELF AS RESULT&lt;br /&gt;
  6  , MEMBER PROCEDURE print_instance_variable&lt;br /&gt;
  7  , ORDER MEMBER FUNCTION equals( my_class myType ) RETURN NUMBER )INSTANTIABLE NOT FINAL;&lt;br /&gt;
  8  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY myType AS&lt;br /&gt;
  2    CONSTRUCTOR FUNCTION myType&lt;br /&gt;
  3    RETURN SELF AS RESULT IS&lt;br /&gt;
  4      my_instance_number NUMBER := 0;&lt;br /&gt;
  5      my_instance_name   VARCHAR2(20 CHAR) := &amp;quot;&amp;quot;;&lt;br /&gt;
  6&lt;br /&gt;
  7    BEGIN&lt;br /&gt;
  8      SELF.my_number := my_instance_number;&lt;br /&gt;
  9      SELF.my_name := my_instance_name;&lt;br /&gt;
 10      RETURN;&lt;br /&gt;
 11&lt;br /&gt;
 12    END;&lt;br /&gt;
 13&lt;br /&gt;
 14    CONSTRUCTOR FUNCTION myType( my_number NUMBER , my_name   VARCHAR2 )&lt;br /&gt;
 15    RETURN SELF AS RESULT IS&lt;br /&gt;
 16    BEGIN&lt;br /&gt;
 17      SELF.my_number := my_number;&lt;br /&gt;
 18      SELF.my_name := my_name;&lt;br /&gt;
 19      RETURN;&lt;br /&gt;
 20    END;&lt;br /&gt;
 21&lt;br /&gt;
 22    MEMBER PROCEDURE print_instance_variable IS&lt;br /&gt;
 23    BEGIN&lt;br /&gt;
 24      DBMS_OUTPUT.PUT_LINE(&amp;quot;Number:&amp;quot;||SELF.my_number);&lt;br /&gt;
 25      DBMS_OUTPUT.PUT_LINE(&amp;quot;Name  :&amp;quot;||SELF.my_name);&lt;br /&gt;
 26    END;&lt;br /&gt;
 27    ORDER MEMBER FUNCTION equals( my_class myType )RETURN NUMBER IS&lt;br /&gt;
 28      false_value NUMBER := 0;&lt;br /&gt;
 29      true_value  NUMBER := 1;&lt;br /&gt;
 30    BEGIN&lt;br /&gt;
 31      IF SELF.my_number = my_class.my_number AND SELF.my_name = my_class.my_name THEN&lt;br /&gt;
 32        RETURN true_value;&lt;br /&gt;
 33      ELSE&lt;br /&gt;
 34        RETURN false_value;&lt;br /&gt;
 35      END IF;&lt;br /&gt;
 36    END;&lt;br /&gt;
 37  END;&lt;br /&gt;
 38  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    obj1 myType := myType;&lt;br /&gt;
  3    obj2 myType := myType(1,&amp;quot;My Object&amp;quot;);&lt;br /&gt;
  4&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    obj1.print_instance_variable;&lt;br /&gt;
  7&lt;br /&gt;
  8    obj2.print_instance_variable;&lt;br /&gt;
  9&lt;br /&gt;
 10    IF obj1.equals(obj2) = 1 THEN&lt;br /&gt;
 11      DBMS_OUTPUT.PUT_LINE(&amp;quot;equal.&amp;quot;);&lt;br /&gt;
 12    ELSE&lt;br /&gt;
 13      DBMS_OUTPUT.PUT_LINE(&amp;quot;unequal.&amp;quot;);&lt;br /&gt;
 14    END IF;&lt;br /&gt;
 15&lt;br /&gt;
 16  END;&lt;br /&gt;
 17  /&lt;br /&gt;
Number:0&lt;br /&gt;
Name  :&lt;br /&gt;
Number:1&lt;br /&gt;
Name  :My Object&lt;br /&gt;
unequal.&lt;br /&gt;
PL/SQL procedure successfully completed.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Call Object member function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; 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    MEMBER FUNCTION getByDate RETURN DATE&lt;br /&gt;
  9  );&lt;br /&gt;
 10  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace TYPE BODY ProductType AS&lt;br /&gt;
  2   MEMBER FUNCTION getByDate RETURN DATE IS&lt;br /&gt;
  3      v_by_date DATE;&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5     SELECT SYSDATE&lt;br /&gt;
  6      INTO v_by_date&lt;br /&gt;
  7      FROM dual;&lt;br /&gt;
  8&lt;br /&gt;
  9     RETURN v_by_date;&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 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;  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(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.getByDate()&lt;br /&gt;
  2  FROM products p;&lt;br /&gt;
P.PRODUCT&lt;br /&gt;
---------&lt;br /&gt;
05-JUN-07&lt;br /&gt;
05-JUN-07&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;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Compare two type object instances==&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 empName AUTHID CURRENT_USER IS OBJECT&lt;br /&gt;
  2   ( fname VARCHAR2(20 CHAR)&lt;br /&gt;
  3   , lname  VARCHAR2(20 CHAR)&lt;br /&gt;
  4   , CONSTRUCTOR FUNCTION empName RETURN SELF AS RESULT&lt;br /&gt;
  5   , CONSTRUCTOR FUNCTION empName ( fname VARCHAR2, lname  VARCHAR2 )RETURN SELF AS RESULT&lt;br /&gt;
  6   , MEMBER PROCEDURE print_instance_variable&lt;br /&gt;
  7   , ORDER MEMBER FUNCTION equals( my_class empName ) RETURN NUMBER )&lt;br /&gt;
  8   INSTANTIABLE NOT FINAL;&lt;br /&gt;
  9   /&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY empName AS&lt;br /&gt;
  2     CONSTRUCTOR FUNCTION empName RETURN SELF AS RESULT IS&lt;br /&gt;
  3       fname VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  4       lname  VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  5     BEGIN&lt;br /&gt;
  6       SELF.fname := fname;&lt;br /&gt;
  7       SELF.lname := lname;&lt;br /&gt;
  8       RETURN;&lt;br /&gt;
  9     END;&lt;br /&gt;
 10     CONSTRUCTOR FUNCTION empName(fname VARCHAR2, lname VARCHAR2)RETURN SELF AS RESULT IS&lt;br /&gt;
 11     BEGIN&lt;br /&gt;
 12       SELF.fname := fname;&lt;br /&gt;
 13       SELF.lname := lname;&lt;br /&gt;
 14        RETURN;&lt;br /&gt;
 15     END;&lt;br /&gt;
 16     MEMBER PROCEDURE print_instance_variable IS&lt;br /&gt;
 17     BEGIN&lt;br /&gt;
 18       DBMS_OUTPUT.PUT_LINE(&amp;quot;Name [&amp;quot;||SELF.fname||&amp;quot;, &amp;quot;||SELF.lname||&amp;quot;]&amp;quot;);&lt;br /&gt;
 19     END;&lt;br /&gt;
 20&lt;br /&gt;
 21     ORDER MEMBER FUNCTION equals( my_class empName )RETURN NUMBER IS&lt;br /&gt;
 22        false_value NUMBER := 0;&lt;br /&gt;
 23       true_value  NUMBER := 1;&lt;br /&gt;
 24      BEGIN&lt;br /&gt;
 25       IF SELF.fname = my_class.fname AND SELF.lname = my_class.lname   THEN&lt;br /&gt;
 26         RETURN true_value;&lt;br /&gt;
 27       ELSE&lt;br /&gt;
 28         RETURN false_value;&lt;br /&gt;
 29       END IF;&lt;br /&gt;
 30     END;&lt;br /&gt;
 31   END;&lt;br /&gt;
 32    /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE empType AUTHID CURRENT_USER IS OBJECT&lt;br /&gt;
  2   ( ename   empName&lt;br /&gt;
  3   , address VARCHAR2(20 CHAR)&lt;br /&gt;
  4   , city           VARCHAR2(14 CHAR)&lt;br /&gt;
  5   , state          VARCHAR2(2 CHAR)&lt;br /&gt;
  6   , postal_code    VARCHAR2(5 CHAR)&lt;br /&gt;
  7   , CONSTRUCTOR FUNCTION empType RETURN SELF AS RESULT&lt;br /&gt;
  8   , CONSTRUCTOR FUNCTION empType(ename empName,address VARCHAR2,city VARCHAR2,state VARCHAR2,postal_code VARCHAR2 )RETURN SELF AS RESULT&lt;br /&gt;
  9   , CONSTRUCTOR FUNCTION empType(fname VARCHAR2, lname VARCHAR2, address VARCHAR2,city VARCHAR2,state VARCHAR2,postal_code VARCHAR2 )RETURN SELF AS RESULT&lt;br /&gt;
 10   , MEMBER PROCEDURE print_instance_variable, ORDER MEMBER FUNCTION equals( my_class empType ) RETURN NUMBER )&lt;br /&gt;
 11   INSTANTIABLE NOT FINAL;&lt;br /&gt;
 12   /&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; CREATE OR REPLACE TYPE BODY empType AS CONSTRUCTOR FUNCTION empType  RETURN SELF AS RESULT IS&lt;br /&gt;
  2       fname     VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  3       lname      VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  4       address VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  5       city           VARCHAR2(14 CHAR) := NULL;&lt;br /&gt;
  6       state          VARCHAR2(2 CHAR)  := NULL;&lt;br /&gt;
  7       postal_code    VARCHAR2(5 CHAR)  := NULL;&lt;br /&gt;
  8     BEGIN&lt;br /&gt;
  9       SELF.ename := empName(fname,lname);&lt;br /&gt;
 10       SELF.address := address;&lt;br /&gt;
 11       SELF.city := city;&lt;br /&gt;
 12       SELF.state := state;&lt;br /&gt;
 13       SELF.postal_code := postal_code;&lt;br /&gt;
 14        RETURN;&lt;br /&gt;
 15     END;&lt;br /&gt;
 16     CONSTRUCTOR FUNCTION empType(ename empName, address VARCHAR2, city VARCHAR2, state VARCHAR2, postal_code VARCHAR2 )&lt;br /&gt;
 17     RETURN SELF AS RESULT IS&lt;br /&gt;
 18     BEGIN&lt;br /&gt;
 19       SELF.ename := ename;&lt;br /&gt;
 20       SELF.address := address;&lt;br /&gt;
 21       SELF.city := city;&lt;br /&gt;
 22        SELF.state := state;&lt;br /&gt;
 23       SELF.postal_code := postal_code;&lt;br /&gt;
 24        RETURN;&lt;br /&gt;
 25&lt;br /&gt;
 26     END;&lt;br /&gt;
 27&lt;br /&gt;
 28     CONSTRUCTOR FUNCTION empType(fname VARCHAR2,lname VARCHAR2,address VARCHAR2,city VARCHAR2,state VARCHAR2,postal_code VARCHAR2 )&lt;br /&gt;
 29     RETURN SELF AS RESULT IS&lt;br /&gt;
 30     BEGIN&lt;br /&gt;
 31       SELF.ename := empName(fname,lname);&lt;br /&gt;
 32        SELF.address := address;&lt;br /&gt;
 33       SELF.city := city;&lt;br /&gt;
 34        SELF.state := state;&lt;br /&gt;
 35       SELF.postal_code := postal_code;&lt;br /&gt;
 36       RETURN;&lt;br /&gt;
 37&lt;br /&gt;
 38     END;&lt;br /&gt;
 39     MEMBER PROCEDURE print_instance_variable IS&lt;br /&gt;
 40      BEGIN&lt;br /&gt;
 41        SELF.ename.print_instance_variable;&lt;br /&gt;
 42        DBMS_OUTPUT.PUT_LINE(&amp;quot;First Name    : &amp;quot;||SELF.ename.fname);&lt;br /&gt;
 43        DBMS_OUTPUT.PUT_LINE(&amp;quot;Last Name     : &amp;quot;||SELF.ename.lname);&lt;br /&gt;
 44        DBMS_OUTPUT.PUT_LINE(&amp;quot;Street Address: &amp;quot;||SELF.address);&lt;br /&gt;
 45       DBMS_OUTPUT.PUT_LINE(&amp;quot;City          : &amp;quot;||SELF.city);&lt;br /&gt;
 46       DBMS_OUTPUT.PUT_LINE(&amp;quot;State         : &amp;quot;||SELF.state);&lt;br /&gt;
 47       DBMS_OUTPUT.PUT_LINE(&amp;quot;Postal Code   : &amp;quot;||SELF.postal_code);&lt;br /&gt;
 48&lt;br /&gt;
 49     END;&lt;br /&gt;
 50&lt;br /&gt;
 51     ORDER MEMBER FUNCTION equals( my_class empType)RETURN NUMBER IS&lt;br /&gt;
 52       false_value NUMBER := 0;&lt;br /&gt;
 53       true_value  NUMBER := 1;&lt;br /&gt;
 54     BEGIN&lt;br /&gt;
 55       IF SELF.ename.equals(my_class.ename) = true_value AND SELF.address = my_class.address AND SELF.city = my_class.city AND SELF.state = my_class.state AND&lt;br /&gt;
 56          SELF.postal_code = my_class.postal_code THEN&lt;br /&gt;
 57         RETURN true_value;&lt;br /&gt;
 58       ELSE&lt;br /&gt;
 59         RETURN false_value;&lt;br /&gt;
 60&lt;br /&gt;
 61       END IF;&lt;br /&gt;
 62&lt;br /&gt;
 63     END;&lt;br /&gt;
 64&lt;br /&gt;
 65   END;&lt;br /&gt;
 66   /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2     obj1 empType := empType(&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;1 str&amp;quot;,&amp;quot;CA&amp;quot;,&amp;quot;E&amp;quot;,&amp;quot;111&amp;quot;);&lt;br /&gt;
  3     obj2 empType := empType(empName(&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;),&amp;quot;1 rd&amp;quot;,&amp;quot;city&amp;quot;,&amp;quot;TX&amp;quot;,&amp;quot;222&amp;quot;);&lt;br /&gt;
  4   BEGIN&lt;br /&gt;
  5     obj1.print_instance_variable;&lt;br /&gt;
  6&lt;br /&gt;
  7     obj2.print_instance_variable;&lt;br /&gt;
  8&lt;br /&gt;
  9     IF obj1.equals(obj2) = 1 THEN&lt;br /&gt;
 10       DBMS_OUTPUT.PUT_LINE(&amp;quot;equal.&amp;quot;);&lt;br /&gt;
 11     ELSE&lt;br /&gt;
 12       DBMS_OUTPUT.PUT_LINE(&amp;quot;unequal.&amp;quot;);&lt;br /&gt;
 13     END IF;&lt;br /&gt;
 14    END;&lt;br /&gt;
 15   /&lt;br /&gt;
Name [A, B]&lt;br /&gt;
First Name    : A&lt;br /&gt;
Last Name     : B&lt;br /&gt;
Street Address: 1 str&lt;br /&gt;
City          : CA&lt;br /&gt;
State         : E&lt;br /&gt;
Postal Code   : 111&lt;br /&gt;
Name [A, B]&lt;br /&gt;
First Name    : A&lt;br /&gt;
Last Name     : B&lt;br /&gt;
Street Address: 1 rd&lt;br /&gt;
City          : city&lt;br /&gt;
State         : TX&lt;br /&gt;
Postal Code   : 222&lt;br /&gt;
unequal.&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== This script builds a sample object type with 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;
SQL&amp;gt; CREATE OR REPLACE TYPE myType&lt;br /&gt;
  2  AUTHID CURRENT_USER IS OBJECT&lt;br /&gt;
  3  ( fname VARCHAR2(20 CHAR)&lt;br /&gt;
  4  , lname  VARCHAR2(20 CHAR)&lt;br /&gt;
  5  , CONSTRUCTOR FUNCTION myType RETURN SELF AS RESULT&lt;br /&gt;
  6  , CONSTRUCTOR FUNCTION myType ( fname VARCHAR2, lname  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 )INSTANTIABLE NOT FINAL;&lt;br /&gt;
  9  /&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; CREATE OR REPLACE TYPE BODY myType AS&lt;br /&gt;
  2    CONSTRUCTOR FUNCTION myType&lt;br /&gt;
  3    RETURN SELF AS RESULT IS&lt;br /&gt;
  4      fname VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  5      lname  VARCHAR2(20 CHAR) := NULL;&lt;br /&gt;
  6    BEGIN&lt;br /&gt;
  7      SELF.fname := fname;&lt;br /&gt;
  8      SELF.lname := lname;&lt;br /&gt;
  9      RETURN;&lt;br /&gt;
 10    END;&lt;br /&gt;
 11&lt;br /&gt;
 12    CONSTRUCTOR FUNCTION myType( fname VARCHAR2, lname  VARCHAR2 )&lt;br /&gt;
 13    RETURN SELF AS RESULT IS&lt;br /&gt;
 14    BEGIN&lt;br /&gt;
 15      SELF.fname := fname;&lt;br /&gt;
 16      SELF.lname := lname;&lt;br /&gt;
 17      RETURN;&lt;br /&gt;
 18    END;&lt;br /&gt;
 19    MEMBER PROCEDURE print_instance_variable IS&lt;br /&gt;
 20    BEGIN&lt;br /&gt;
 21      DBMS_OUTPUT.PUT_LINE(&amp;quot;Name:&amp;quot;||SELF.fname||&amp;quot;, &amp;quot;||SELF.lname);&lt;br /&gt;
 22&lt;br /&gt;
 23    END;&lt;br /&gt;
 24&lt;br /&gt;
 25    ORDER MEMBER FUNCTION equals( my_class myType )&lt;br /&gt;
 26    RETURN NUMBER IS&lt;br /&gt;
 27      false_value NUMBER := 0;&lt;br /&gt;
 28      true_value  NUMBER := 1;&lt;br /&gt;
 29    BEGIN&lt;br /&gt;
 30      IF SELF.fname = my_class.fname AND&lt;br /&gt;
 31         SELF.lname = my_class.lname   THEN&lt;br /&gt;
 32        RETURN true_value;&lt;br /&gt;
 33      ELSE&lt;br /&gt;
 34        RETURN false_value;&lt;br /&gt;
 35&lt;br /&gt;
 36      END IF;&lt;br /&gt;
 37&lt;br /&gt;
 38    END;&lt;br /&gt;
 39&lt;br /&gt;
 40  END;&lt;br /&gt;
 41  /&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;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== This script demonstrates the static method.==&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; SET SERVEROUTPUT ON SIZE 1000000&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     STATIC FUNCTION new_price (p_price IN NUMBER,rebate IN NUMBER DEFAULT .1)&lt;br /&gt;
  5        RETURN NUMBER&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; CREATE OR REPLACE TYPE BODY PriceType&lt;br /&gt;
  2  AS&lt;br /&gt;
  3     STATIC FUNCTION new_price(p_price IN NUMBER,rebate IN NUMBER DEFAULT .1)&lt;br /&gt;
  4        RETURN NUMBER&lt;br /&gt;
  5     IS&lt;br /&gt;
  6     BEGIN&lt;br /&gt;
  7        RETURN (p_price * (1 - rebate));&lt;br /&gt;
  8     END new_price;&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- exec DBMS_OUTPUT.PUT_LINE(PriceType.new_price(75));&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Type with member function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TYPE cd_keyword_tab_t AS TABLE OF VARCHAR2 (60);&lt;br /&gt;
  2  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TYPE cd_t AS OBJECT(&lt;br /&gt;
  2     id                            INTEGER,&lt;br /&gt;
  3     title                         VARCHAR2 (60),&lt;br /&gt;
  4     artist                        VARCHAR2 (60),&lt;br /&gt;
  5     label                         VARCHAR2 (60),&lt;br /&gt;
  6     keywords                      cd_keyword_tab_t,&lt;br /&gt;
  7     MAP MEMBER FUNCTION compare   RETURN VARCHAR2&lt;br /&gt;
  8  );&lt;br /&gt;
  9  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; drop type cd_t;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop type cd_keyword_tab_t;&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;
== Type with toString and mapping functions==&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; alter type Address_Type&lt;br /&gt;
  2  REPLACE&lt;br /&gt;
  3  as object&lt;br /&gt;
  4  (  street_addr1   varchar2(25),&lt;br /&gt;
  5     street_addr2   varchar2(25),&lt;br /&gt;
  6     city           varchar2(30),&lt;br /&gt;
  7     state          varchar2(2),&lt;br /&gt;
  8     zip_code       number,&lt;br /&gt;
  9     member function toString return varchar2,&lt;br /&gt;
 10     map member function mapping_function return varchar2&lt;br /&gt;
 11  )&lt;br /&gt;
 12  /&lt;br /&gt;
Type altered.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace type body Address_Type&lt;br /&gt;
  2  as&lt;br /&gt;
  3      member function toString return varchar2&lt;br /&gt;
  4      is&lt;br /&gt;
  5      begin&lt;br /&gt;
  6          if ( street_addr2 is not NULL )&lt;br /&gt;
  7          then&lt;br /&gt;
  8              return street_addr1 || &amp;quot; &amp;quot; ||&lt;br /&gt;
  9                     street_addr2 || &amp;quot; &amp;quot; ||&lt;br /&gt;
 10                     city || &amp;quot;, &amp;quot; || state || &amp;quot; &amp;quot; || zip_code;&lt;br /&gt;
 11          else&lt;br /&gt;
 12              return street_addr1 || &amp;quot; &amp;quot; ||&lt;br /&gt;
 13                     city || &amp;quot;, &amp;quot; || state || &amp;quot; &amp;quot; || zip_code;&lt;br /&gt;
 14          end if;&lt;br /&gt;
 15      end;&lt;br /&gt;
 16&lt;br /&gt;
 17      map member function mapping_function return varchar2&lt;br /&gt;
 18      is&lt;br /&gt;
 19      begin&lt;br /&gt;
 20          return to_char( nvl(zip_code,0), &amp;quot;fm00000&amp;quot; ) ||&lt;br /&gt;
 21                 lpad( nvl(city,&amp;quot; &amp;quot;), 30 ) ||&lt;br /&gt;
 22                 lpad( nvl(street_addr1,&amp;quot; &amp;quot;), 25 ) ||&lt;br /&gt;
 23                 lpad( nvl(street_addr2,&amp;quot; &amp;quot;), 25 );&lt;br /&gt;
 24      end;&lt;br /&gt;
 25  end;&lt;br /&gt;
 26  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt;&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;&lt;br /&gt;
SQL&amp;gt; create or replace type Address_Array_Type&lt;br /&gt;
  2  as varray(50) of Address_Type&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; alter table people add previous_addresses Address_Array_Type&lt;br /&gt;
  2  /&lt;br /&gt;
Table altered.&lt;br /&gt;
SQL&amp;gt; set echo on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2      l_prev_addresses   address_Array_Type;&lt;br /&gt;
  3    begin&lt;br /&gt;
  4            select p.previous_addresses into l_prev_addresses from people p&lt;br /&gt;
  5             where p.name = &amp;quot;Tom Kyte&amp;quot;;&lt;br /&gt;
  6&lt;br /&gt;
  7            l_prev_addresses.extend;&lt;br /&gt;
  8            l_prev_addresses(l_prev_addresses.count) := Address_Type( &amp;quot;1 Street&amp;quot;, null,&amp;quot;Reston&amp;quot;, &amp;quot;VA&amp;quot;, 45678 );&lt;br /&gt;
  9&lt;br /&gt;
 10            update people set previous_addresses = l_prev_addresses where name = &amp;quot;Tom Kyte&amp;quot;;&lt;br /&gt;
 11    end;&lt;br /&gt;
 12  /&lt;br /&gt;
declare&lt;br /&gt;
*&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-01403: no data found&lt;br /&gt;
ORA-06512: at line 4&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select name, prev.city, prev.state, prev.zip_code from people p, table( p.previous_addresses ) prev&lt;br /&gt;
  2  /&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; drop type Address_Array_Type;&lt;br /&gt;
Type dropped.&lt;br /&gt;
SQL&amp;gt; drop type address_type;&lt;br /&gt;
Type dropped.&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>