在命名行类型之间强制转型的示例

假定创建下一示例中显示的命名行类型和表。尽管命名行类型在结构上相当,但是 writer_teditor_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_teditor_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;