为了对单值类型强制执行强类型化,数据库服务器提供了显式强制转型来处理单值类型与其源类型之间的转换。然而,单值类型的创建者可以删除现有的显式强制转型并创建隐式强制转型,以使单值类型与其源类型之间的转换不要求进行显式强制转型。
重要: 当删除单值类型与其源类型之间的由数据库服务器提供的显式强制转型,然后改为创建隐式强制转型来处理这些数据类型之间的转换时,就无法充分发挥单值类型的独特性。
以下 DROP CAST 语句删除两个自动对
movie_type 定义的显式强制转型:
DROP CAST(movie_type AS VARCHAR(30));
DROP CAST(VARCHAR(30) AS movie_type);
在删除现有强制转型之后,可以创建两个隐式强制转型来处理
movie_type 与 VARCHAR 之间的转换。下列 CREATE CAST 语句用于创建两个隐式强制转型:
CREATE IMPLICIT CAST (movie_type AS VARCHAR(30));
CREATE IMPLICIT CAST (VARCHAR(30) AS movie_type);
如果数据库中已存在用于在两种数据类型之间进行转换的强制转型,那么不能创建这样的强制转型。
如果创建隐式强制转型来在单值类型与其源类型之间进行转换,那么可以在不进行显式强制转型的情况下对两种类型作比较。在以下语句中,
video
列与
laser_disc 列之间的比较要求进行转换。由于已创建隐式强制转型,所以 VARCHAR 与
movie_type 之间的转换是隐式的。
SELECT video FROM entertainment
WHERE video = laser_disc