A database system and method allows a user to write program code in a high-level
programming language that implements a class that defines the structure of a user-defined
type and methods that can be invoked on instances of the type. The class is then
registered with the database system, which enforces a specific contract for user-defined
types against the class. The contract comprises the following requirements. First,
the class must specify one of a plurality of different formats for persisting instances
of the user-defined type in a database store. Second, the class must be capable
of returning a null value for the user-defined type. Third, the class must provide
a method for converting the user-defined type to another type. Once these requirements
are satisfied, the database system enables instances of the user-defined type to
be created. A user-defined type can be used in all contexts where any other built-in
type can be used. This includes defining columns of tables, declaring variables
and parameters to functions and stored procedures, and evaluating expressions of
the user-defined type in SQL queries and updates. Preferably, the database system
stores metadata about the user-defined type for subsequent use in creating instances
of the type.