插入到 Collection 游标内
Collection 游标允许您访问集合变量的单个元素。 要声明 Collection 游标,请使用 DECLARE 语
句并包括在您将其与游标关联的 INSERT 语句中的“集合派生的表”段。一旦您以 OPEN 语句打开
Collection 游标,该游标可将元素放在集合变量中。
要一次一个地将元素放到 Insert 游标内,请使用 PUT 语句和 FROM 子句。 PUT 语句指定与该集
合变量相关联的 Collection 游标。 FROM 子句标识要被插入到游标内的元素值。 在 FROM 子句
中的任何主变量的数据类型必须与该集合的元素类型相匹配。
Important: 集合变量存储集合的元素。然而,它与数据库列没有内在的联系。一旦集合变量包含
正确的元素,那么您必须以 INSERT 或 UPDATE 语句将该变量保存到实际的集合列内。
假设您有一名为 children 的表,其模式如下:
CREATE TABLE children
(
age SMALLINT,
name VARCHAR(30),
fav_colors SET(VARCHAR(20) NOT NULL)
);
下列 GBase 8s ESQL/C 程序片断展示如何使用 Insert 游标将元素放入名为 child_colors 的集合变
量内:
EXEC SQL BEGIN DECLARE SECTION;
client collection child_colors;
char *favorites[]
(
“blue”,
“purple”,
“green”,
“white”,
“gold”,
0
);
int a = 0;
char child_name[21];
EXEC SQL END DECLARE SECTION;
EXEC SQL allocate collection :child_colors;
/* 获取 fav_colors 列的结构,对于 untyped
- child_colors 集合变量 */
EXEC SQL select fav_colors into :child_colors
from children where name = :child_name;
/* 为 child_colors 集合变量声明插入游标
- 并打开此游标 */
EXEC SQL declare colors_curs cursor for
insert into table(:child_colors)
values (?);
EXEC SQL open colors_curs;
/* 使用 PUT 来将 favorite-color 值收集
- 到游标内 */
while (fav_colors[a])
{
EXEC SQL put colors_curs from :favorites[:a];
a++
…
}
/* 刷新游标内容到集合变量 */
EXEC SQL flush colors_curs;
EXEC SQL update children set fav_colors = :child_colors;
EXEC SQL close colors_curs;
EXEC SQL deallocate collection :child_colors;
在 FLUSH 语句执行之后,集合变量 child_colors 包含元素 {“blue”, “purple”, “green”,
“white”, “gold”}。在此程序片断的末尾的 UPDATE 语句将新的集合保存到数据库的
fav_colors 列内。没有此 UPDATE 语句,就不会将新的集合插入到集合列。