插入至集合内

您可将值插入至集合内,而不声明游标。如果该集合为 SET 或 MULTISET,则将该值添加到集合,但不定义新元素的位置,因为该集合没有特定的顺序。如果该值为 LIST,则您可将新元素添加在 LIST 中特定的位置,或添加在 LIST 的末尾。

manager 表中,direct_reports 列包含 SET 类型的集合,且 projects 列包含 LIST。要将名称添加到 direct_reports 列中的 SET,请使用带有集合派生的表的 INSERT 语句,如下图所示。

图: 将值插入至集合。

CREATE PROCEDURE new_emp( emp VARCHAR(30), mgr VARCHAR(30) )
          
          DEFINE r SET(VARCHAR(30) NOT NULL);
          
          SELECT direct_reports INTO r FROM manager
          WHERE mgr_name = mgr;
          
          INSERT INTO TABLE (r) VALUES(emp);
          
          UPDATE manager SET direct_reports = r
          WHERE mgr_name = mgr;
          
          END PROCEDURE;

此 SPL 过程将员工姓名和管理者姓名作为参数。然后,该过程为用户已输入了的管理者选择 direct_reports 列中的集合,添加用户已输入了的员工名称,并以新集合更新 manager 表。

前图中的 INSERT 语句将用户提供的新的员工姓名插入至在集合变量 r 中包含的 SET 内。然后,UPDATE 语句将新集合存储在 manager 表中。

请注意 VALUES 子句的语法。将文字的数据和变量插入至集合变量内的语法规则如下:
  • 使用 VALUES 关键字之后的圆括号来括起值的完整列表。
  • 如果该集合为 SET、MULTISET 或 LIST,则请使用后跟方括号的类型构造函数来将要插入的值的列表括起来。此外,必须将集合值括在引号中。
    VALUES( "SET{ 1,4,8,9 }" )
  • 如果该集合包含 row 类型,请使用后跟圆括号的 ROW 来将要插入的值的列表括起来:
    VALUES( ROW( 'Waters', 'voyager_project' ) )
  • 如果该集合为嵌套的集合,则根据定义数据类型的方式,嵌套关键字、圆括号和方括号:
    VALUES( "SET{ ROW('Waters', 'voyager_project'),
                      ROW('Adams', 'horizon_project') }")

要获取关于将值插入至集合的信息,请参阅 修改数据