在未命名行类型之间强制转型

可以在不使用显式强制转型的情况下将结构上等价的两种未命名行类型作比较。还可以将一种未命名行类型与另一种未命名行类型作比较,条件是这两种行类型具有相同数目的字段,并且存在用于转换不具有相同数据类型的对应字段的值的强制转型。换而言之,如果所有用于处理字段转换的强制转型都是系统定义的或者都是隐式强制转型,则从一种未命名行类型到另一种未命名行类型的强制转型是隐式的。否则,必须显式地对未命名行类型进行强制转型才能将其与另一种行类型作比较。

假定创建以下 prices 表:
CREATE TABLE prices
(col1  ROW(a SMALLINT, b FLOAT)
  col2  ROW(x INT, y REAL) )
当存在用于在对应字段之间执行转换的内置强制转型时,可以对两种未命名行类型的值作比较(无需使用显式强制转型)。因此,以下查询不需要显式强制转型就可以将 col1col2 值作比较:
SELECT * FROM prices WHERE col1 = col2

在本示例中,数据库服务器隐式地调用内置强制转型来将 SMALLINT 的字段值转换为 INT 并,将 REAL 的字段值转换为 FLOAT。

如果两种行类型的对应字段不能隐式地相互进行强制转型,则可显式地在类型之间进行强制转型(如果存在用于处理这两种类型之间的转换的用户定义的强制转型的话)。