DB2 12 - Data types - Distinct types


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

DB2 12 - Data types - Distinct types

A distinct type is a user-defined data type that is based on existing built-in Db2® data types.

A distinct type is internally the same as a built-in data type, but Db2 treats them as a separate and incompatible type for semantic purposes.

Defining your own distinct type ensures that only functions that are explicitly defined on a distinct type can be applied to its instances.

Example 1:
You might define a US_DOLLAR distinct type that is based on the Db2 DECIMAL data type to identify decimal values that represent United States dollars.
The US_DOLLAR distinct type does not automatically acquire the functions and operators of its source type, DECIMAL.

Although you can have different distinct types that are based on the same built-in data types, distinct types have the property of strong typing.
With this property, you cannot directly compare instances of a distinct type with anything other than another instance of that same type.
Strong typing prevents semantically incorrect operations (such as explicit addition of two different currencies) without first undergoing a conversion process.
You define which types of operations can occur for instances of a distinct type.

If your company wants to track sales in many countries, you must convert the currency for each country in which you have sales.

Example 2:
You can define a distinct type for each country.
For example, to create US_DOLLAR types and CANADIAN_DOLLAR types, you can use the following CREATE DISTINCT TYPE statements:

CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,2);
CREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,2);

Example 3:
After you define distincttypes, you can use them in your CREATE TABLE statements:

   CREATE TABLE US_SALES
         (PRODUCT_ITEM_NO INTEGER,
          MONTH           INTEGER,
          YEAR            INTEGER,
          TOTAL_AMOUNT    US_DOLLAR);

   CREATE TABLE CANADIAN_SALES
         (PRODUCT_ITEM_NO INTEGER,
          MONTH           INTEGER,
          YEAR            INTEGER,
          TOTAL_AMOUNT    CANADIAN_DOLLAR);

User-defined functions support the manipulation of distinct types.


© Copyright IBM Corp.