SELECT 语句可包括“集合派生的表”段来从 row 变量选择一个或多个字段。
“集合派生的表”段标识要从其选择字段标识 row 变量。要获取更多信息,请参阅 集合派生表。
要选择字段:
-
在您的 GBase 8s ESQL/C 程序中创建 row 变量。
-
可选地,以字段值填充 row 变量。
您可以 SELECT 语句(无“集合派生的表”段)将 ROW 类型列创建到 row 变量内。或者,您可以 UPDATE 语句和“集合派生的表”段将字段值插入到 row 变量之内。
-
以 SELECT 语句和“集合派生的表”段从 row 变量选择行字段。
-
一旦 row 变量包含正确的字段值,您可在表或视图名称上使用 INSERT 或 UPDATE 语句来将 row 变量的内容保存在命名的或未命名的行列中。
INTO 子句可指定主变量来把保持从 row 变量选择的字段值。
主变量的类型必须与字段的类型相兼容。例如,此代码片断将
width 字段值放到
rect_width 主变量之内。
EXEC SQL BEGIN DECLARE SECTION;
ROW (x INT, y INT, length FLOAT, width FLOAT) myrect;
double rect_width;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL SELECT rect INTO :myrect FROM rectangles
WHERE area = 200;
EXEC SQL SELECT width INTO :rect_width FROM table(:myrect);
对
row 变量的 SELECT 语句有下列限制:
- 在 Projection 子句的选择列表中不允许有表达式。
- ROW 列不可在 WHERE 子句比较条件中。
- 如果 row 类型包含 opaque、distinct 或内建的数据类型,则 Projection 子句必须为星号(*)。
- 罗列在 Projection 子句中的列必须仅有未限定的名称。它们不可使用语法
database@server:table.column。
- 不允许有下列子句:GROUP BY、HAVING、INTO TEMP、ORDER BY 和 WHERE。
- FROM 子句对进行连接没有任何规定。
您可以 UPDATA 语句的“集合派生的表”段修改 row 变量。(INSERT 和 DELETE 语句不支持“集合派生的表”段中的 row 变量。)
row 变量存储行的字段。然而,它与数据库行没有内在的连接。一旦
row 变量包含正确的字段值,那么您必须以下列
SQL 语句之一将该变量保存到 ROW 列之内:
- 要以 row 变量来更新表中的 ROW 列,请对表或视图名称使用 UPDATE 语句,并在 SET 子句中指定 row 变量。要获取更多信息,请参阅 更新 ROW 类型列。
- 要将行插入到 ROW 列,请对表或视图使用 INSERT 语句并在 VALUES 子句中指定 row 变量。请参阅 将值插入到 ROW 类型列内。
要获取如何使用 SPL row 变量的示例,请参阅
GBase 8s SQL 教程指南。要获取关于使用 GBase 8s ESQL/C row 变量的信息,请参阅在 GBase 8s ESQL/C 程序员手册 中对复合的数据类型的讨论。