假定创建下一示例中显示的命名行类型和表。尽管命名行类型在结构上相当,但是
writer_t 和
editor_t
均是唯一的数据类型。
CREATE ROW TYPE writer_t (name VARCHAR(30), depart CHAR(3));
CREATE ROW TYPE editor_t (name VARCHAR(30), depart CHAR(3));
CREATE TABLE projects
(
book_title VARCHAR(20),
writer writer_t,
editor editor_t
);
要处理两种命名行类型之间的转换,必须首先创建用户定义的强制转型。以下示例创建一个强制转型函数并将其注册为强制转型,以处理从类型
writer_t 到
editor_t 的转换:
CREATE FUNCTION cast_rt (w writer_t)
RETURNS editor_t
RETURN (ROW(w.name, w.depart)::editor_t);
END FUNCTION;
CREATE CAST (writer_t as editor_t WITH cast_rt);
创建并注册强制转型之后,可以将类型为
writer_t 的值显式强制转型为
editor_t。以下查询在 WHERE 子句中使用显式强制转型将类型为
writer_t 的值转换为
editor_t:
SELECT book_title FROM projects
WHERE CAST(writer AS editor_t) = editor;
如果您愿意的话,可使用 :: 强制转型运算符来执行同一强制转型,如以下示例所示:
SELECT book_title FROM projects
WHERE writer::editor_t = editor;