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.