Object Oriented Oracle PLSQL Tutorial

Default is FINAL, meaning that the object type cannot be inherited from.
To have a new type inherit attributes and methods from an existing type, you use the UNDER clause when defining your new type.

SQL> CREATE Or Replace TYPE AddressType AS OBJECT (
  2    street VARCHAR2(15),
  3    city   VARCHAR2(15),
  4    state  CHAR(2),
  5    zip    VARCHAR2(5)
  6  )
  7  /
Type created.
SQL>
SQL> CREATE Or Replace TYPE PersonType AS OBJECT (
  2    id         NUMBER,
  3    first_name VARCHAR2(10),
  4    last_name  VARCHAR2(10),
  5    dob        DATE,
  6    phone      VARCHAR2(12),
  7    address    AddressType
  8  ) NOT FINAL;
  9  /
Type created.
SQL>
SQL> CREATE Or replace TYPE business_PersonType UNDER PersonType (
  2    title   VARCHAR2(20),
  3    company VARCHAR2(20)
  4  )
  5  /
Type created.
SQL>
SQL> CREATE TABLE object_business_customers OF business_PersonType
  2  /
Table created.
SQL>
SQL> INSERT INTO object_business_customers VALUES (
  2    business_PersonType(1, 'John', 'Brown', '01-FEB-1933', '800-555-3333',
  3      AddressType('2 Ave', 'town', 'MA', '12345'),'Manager', 'XYZ Corp')
  4  );
1 row created.
SQL>
SQL> SELECT *
  2  FROM object_business_customers;
 ID FIRST_NAME  LAST_NAME DOB       PHONE        ADDRESS(STREET, CITY, STATE, ZIP)           TITLE    COMPANY
-------------------- --------------------
  1 John        Brown     01-FEB-33 800-555-3333 ADDRESSTYPE('2 Ave', 'town', 'MA', '12345') Manager  XYZ Corp
SQL>
SQL> drop table object_business_customers;
Table dropped.
SQL>
SQL> drop type business_PersonType;
Type dropped.
SQL>
SQL> drop type persontype;
Type dropped.
SQL>
SQL> drop type addresstype;
Type dropped.
SQL>