对命名行类型的字段进行显式强制转型

当显式地将值强制转型为命名行类型时,数据库服务器自动调用任何用来将字段值转换为目标数据类型的隐式或显式强制转型。在以下语句中,col1 到类型 row_t 的显式强制转型将自动调用用于将 FLOAT 类型的字段值转换为 d_float 的显式强制转型:
INSERT INTO tab3 SELECT col2::row_t FROM tab2
以下 INSERT 语句包括针对 row_t 类型的显式强制转型。针对行类型的显式强制转型还调用显式强制转型来将 row_t 类型的 b 字段从 FLOAT 转换为 d_float。通常,针对行类型的显式强制转型还对行类型包含的个别字段(深度为一层)调用任何显式强制转型以处理转换。
INSERT INTO tab3 VALUES (ROW(5, 6.55::FLOAT)::row_t)
以下语句也有效,它与前面这个语句返回相同的结果。然而,此语句显示了为了将 row_t 值插入到 tab3 表中而执行的所有显式强制转型。
INSERT INTO tab3 VALUES (ROW(5, 6.55::float::d_float)::row_t)

在前面的示例中,行类型的 b 字段之间的转换要求进行两个级别的强制转型。数据库服务器将任何包含小数点的值作为 DECIMAL 类型的值来处理。 另外,DECIMAL 与 d_float 数据类型之间不存在隐式强制转型,因此需要进行两个级别的强制转型:从 DECIMAL 到 FLOAT 的强制转型以及从 FLOAT 到 d_float 的第二个强制转型。