使用带有 Row 类型表达式的点表示法

除了指定 ROW 数据类型的列之外,您还可使用带有任何求值为 ROW 类型的表达式的点表示法。例如,在 INSERT 语句中,您可在返回值的单独行的子查询中使用点表示法。假设您创建名为 row_t 的 ROW 类型:
CREATE ROW TYPE row_t (part_id INT, amt INT);
还假设您创建了基于 row_t ROW 类型的名为 tab1 的 typed 表:
CREATE TABLE tab1 OF TYPE row_t;
还假设您将下列值插入了表 tab1
INSERT INTO tab1 VALUES (ROW(1,7));
        INSERT INTO tab1 VALUES (ROW(2,10));
最后,假设您创建了另一名为 tab2 的表:
CREATE TABLE tab2 (colx INT);
现在,您可使用点表示法来将仅从表 tab1part_id 列的值插入 tab2 表内:
INSERT INTO tab2
        VALUES ((SELECT t FROM tab1 t
        WHERE part_id = 1).part_id);

当您想要选择 ROW 类型列的所有字段时,星号形式的点表示法不是必须的,因为您可单独指定列名称来选择所有它的字段。然而,当您如在前面示例中那样使用子查询,或当您调用返回 ROW 类型值的用户定义的函数时,点表示法的星号形式可非常有用。

假设名为 new_row 的用户定义的函数返回 ROW 类型值,且您想要调用此函数来将该 ROW 类型值插入表内。星号表示法使得指定将 new_row( ) 函数返回的所有 ROW 类型列插入表内变得非常容易:
INSERT INTO mytab2 SELECT new_row (mycol).* FROM mytab1;

在分片表达式中不允许引用 ROW 类型列的字段或 ROW 类型表达式。分片表达式是在像 CREATE TABLE、CREATE INDEX 和 ALTER FRAGMENT 那样的 SQL 语句中定义表分片或索引分片的表达式。