要将命名行类型的值与未命名行类型的值作比较,可使用显式强制转型。假定创建下列命名行类型和表:
CREATE ROW TYPE info_t (x CHAR(1), y CHAR(20))
CREATE TABLE customer (cust_info info_t)
CREATE TABLE retailer (ret_info ROW (a CHAR(1), b CHAR(20)))
下列 INSERT 语句显示如何创建
customer 和
retailer 表的行类型值:
INSERT INTO customer VALUES(ROW('t','philips')::info_t)
INSERT INTO retailer VALUES(ROW('f','johns'))
要将
customer 表中的数据与
retailer
表中的数据作比较或进行替代,必须使用显式强制转型来将一种行类型的值转换为具有另一行类型。在以下查询中,将
ret_info 列(未命名行类型)显式地强制转型为
info_t(命名行类型):
SELECT cust_info
FROM customer, retailer
WHERE cust_info = ret_info::info_t
通常,要在命名行类型与未命名行类型之间执行转换,必须显式地将一种行类型强制转型为另一行类型。可以在任何一个方向上执行显式强制转型:可以将命名行类型强制转型为未命名行类型,也可以将未命名行类型强制转型为命名行类型。以下语句返回与前一示例相同的结果。但是,本示例中的命名行类型显式地强制转型为未命名行类型:
SELECT cust_info
FROM customer, retailer
WHERE cust_info::ROW(a CHAR(1), b CHAR(20)) = ret_info