单值类型是与现存类型(它的源类型)共享其内部表示的用户定义数据类型但对于大多数运算来说认为单值类型是独立和不兼容的例如您可能想定义年龄类型重量类型以及高度类型所有这些类型都有相当不同的语义但都使用内部数据类型 INTEGER 作为它们的内部表示
下列示例说明了命名为 PAY 的单值类型的创建
CREATE DISTINCT TYPE PAY AS DECIMAL() WITH COMPARISONS
虽然 PAY 有与内部数据类型 DECIMAL()相同的表示但还是认为它是与 DECIMAL()或任何其他类型不可比的独立类型它只能与相同的单值类型比较并且会影响到按 DECIMAL 使用的运算符和函数将在此不适用例如具有 PAY 数据类型的值不能与具有 INTEGER 数据类型的值相乘因此您必须编写只应用于 PAY 数据类型的函数
使用单值数据类型可限制偶然错误例如如果将 EMPLOYEE 表的 SALARY 列定义为 PAY 数据类型则不能将该列添加至 COMM即使它们的源类型相同
单值数据类型支持类型转换源类型可以转换为单值数据类型单值数据类型也可以转换为源类型例如如果将表 EMPLOYEE 的 SALARY 列定义为 PAY 数据类型则下列示例将不会在比较运算符处出错
SELECT * FROM EMPLOYEE
WHERE DECIMAL(SALARY) =
DECIMAL(SALARY)返回一个十进制数据类型相反地数字数据类型可以转换为 PAY 类型例如可以使用 PAY() 来转换数字 的类型