使用集合变量

FOREACH 语句允许您为 SPL 集合变量声明游标。 这种游标称为集合游标。使用集合变量访问集合(SET、 MULTISET 、LIST)列的元素。当要访问集合变量中的一个或多个元素时,请使用游标。

以下来自 SPL 例程的摘抄显示了如果填充集合游标然后如何使用游标访问个别元素:
DEFINE a SMALLINT;
          DEFINE b SET(SMALLINT NOT NULL);
          SELECT numbers INTO b FROM table1 WHERE id = 207;
          FOREACH cursor1 FOR
          SELECT * INTO a FROM TABLE(b);
          ...
          END FOREACH;

在此示例中,SELECT 语句从集合变量 b 中一次选择一个元素插入到元素变量 a 中。该投影列表是星号,因为集合变量 b 包含内置类型的集合。变量 b 与 TABLE 关键字作为 Collection-Derived Table 一起使用。有关更多信息,请参阅集合派生表

下一个示例还显示了如果填充集合变量以及如果使用变量存取个别元素。但是,此示例在它的投影列表中使用 ROW 类型字段的列表:
DEFINE employees employee_t;
          DEFINE n VARCHAR(30);
          DEFINE s INTEGER;
          
          SELECT emp_list into employees FROM dept_table
          WHERE dept_no = 1057;
          FOREACH cursor1 FOR
          SELECT name,salary 
          INTO n,s FROM TABLE( employees ) AS e;
          ...
          END FOREACH;

这里的集合变量 employees 包含一个 ROW 类型的集合。每个 ROW 类型包含 namesalary 字段。该集合查询每次查询一个名字和薪水,并将 name 放到 n 中将 salary 放到 s 中。AS 关键字声明 e 作为集合派生表 employees 的别名。只要 SELECT 语句执行,该别名就存在。