数据库服务器使用下列规则来确定在特定情况下应用哪种强制转型:
- 为了比较两种内置类型,数据库服务器自动调用适当的内置强制转型。
- 数据库服务器仅对每个操作数应用一次隐式强制转型。如果需要两个或更多强制转型才能将操作数转换为指定类型,那么用户必须显式调用其他强制转型。
在下面的示例中,将文字值 5.55 隐式强制转型为 DECIMAL,然后将它显式强制转型为 MONEY,最后强制转型为 yen:
CREATE DISTINCT TYPE yen AS MONEY
. . .
INSERT INTO currency_tab
VALUES (5.55::MONEY::yen)
- 要将单值类型与其源类型进行比较,用户必须将其中一种类型显式强制转型为另一种类型。
- 为了将单值类型与不是其源的类型进行比较,数据库服务器将查找源类型与指定类型之间的隐式强制转型。
如果这两种强制转型均未注册,那么用户必须调用单值类型与指定类型之间的显式强制转型。如果此强制转型未注册,那么数据库服务器自动调用从源类型到指定类型的强制转型。
如果没有定义这些强制转型,那么比较会失败。
- 要将不透明类型与内置类型进行比较,用户必须将不透明类型显式强制转型为数据库服务器可以理解的数据类型(如 LVARCHAR、SENDRECV、IMPEX 或 IMPEXBIN)。然后,数据库服务器调用内置强制转型来将结果转换为指定的内置类型。
- 要比较两种不透明类型,用户必须将其中一种不透明类型显式地强制转型为数据库服务器可以理解的形式(例如:LVARCHAR、SENDRECV、IMPEX 或 IMPEXBIN),然后将此类型显式地强制转型为第二种不透明类型。
有关强制转型和 IMPEX、IMPEXBIN、LVARCHAR 和 SENDRECV 类型的信息,请参阅 GBase 8s 用户定义的例程与数据类型开发者指南。