使用变量更新集合

您还可使用存储在变量中的值,而不是文字值,来更新集合。

下图中的 SPL 过程使用类似于 图 1 展示的语句,除了此过程是使用变量,而不是文字值,来更新 manager 表的 direct_reports 列中的 SET。图 2 定义该 manager 表。

图: 使用变量更新集合。

CREATE PROCEDURE new_report(mgr VARCHAR(30),
          old VARCHAR(30), new VARCHAR(30) )
          
          DEFINE s SET (VARCHAR(30) NOT NULL);
          DEFINE n VARCHAR(30);
          
          SELECT direct_reports INTO s FROM manager
          WHERE mgr_name = mgr;
          
          FOREACH cursor1 FOR
          SELECT * INTO n FROM TABLE(s)
          IF ( n == old ) THEN
          UPDATE TABLE(s)(x)
          SET x = new WHERE CURRENT OF cursor1;
          EXIT FOREACH;
          ELSE
          CONTINUE FOREACH;
          END IF;
          END FOREACH
          
          UPDATE manager SET mgr_name = s
          WHERE mgr_name = mgr;
          
          END PROCEDURE;

嵌套在 FOREACH 循环中的 UPDATE 语句使用集合派生的表 s 和派生的列 x。如果 n 的当前值与 old 相同,则 UPDATE 语句将它更改为 new 的值。第二个 UPDATE 语句在 manager 表中存储新集合。