Oracle Database Server is an object-relational database management system, which means you can define additional kinds of data-specifying both the data and the ways of operating on it-and use these types within the relational model.
There are two categories of user-defined datatypes: object types and collection types. User-defined datatypes use the Built-in datatypes (such as CHAR, VARCHAR2, and NUMBER) and other user-defined datatypes as the building blocks for datatypes that model the structure and behavior of data in applications.
An object type serves as a template for objects. An object type specifies the elements (or attributes) that make up a structured data unit like a purchase order. Some attributes, such as the list of line items, may be other structured data units. An object type also specifies the operations (or methods) you can perform on the data unit, such as determining the total value of a purchase order.
Collection types describe data units that are made up of an indefinite number of elements, all of the same datatype. The collection types are varying array types and table types.
A varying array type specifies a data unit called VARRAY, which is an ordered set of data elements all of the same datatype. The number of elements in a VARRAY (or its size) is variable. However, you must specify a maximum size when you declare the varying array type.
A table type specifies a data unit called a nested table, which is an unordered set of data elements all of the same datatype. A nested table has a single column, and the type of that column is a Built-in type or an object type.