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>