从集合中执行删除操作的示例

假设把表 table1 某一行的 set_col 列定义为 SET ,并且有一行的值为 {1,8,4,5,2}。下面的 SPL 代码段使用 FOREACH 循环和带有 WHERE CURRENT OF 子句的 DELETE 语句来删除值为 4 的元素:
CREATE_PROCEDURE test6()
          
          DEFINE a SMALLINT;
          DEFINE b SET(SMALLINT NOT NULL);
          SELECT set_col INTO b FROM table1
          WHERE id = 6;
          -- Select the set in one row from the table
          -- into a collection variable
          FOREACH cursor1 FOR
          SELECT * INTO a FROM TABLE(b);
          -- Select each element one at a time from
          -- the collection derived table b into a
          IF a = 4 THEN
          DELETE FROM TABLE(b) 
          WHERE CURRENT OF cursor1;
          -- Delete the element if it has the value 4
          EXIT FOREACH;
          END IF;
          END FOREACH;
          
          UPDATE table1 SET set_col = b
          WHERE id = 6;
          -- Update the base table with the new collection
          
          END PROCEDURE;

此 SPL 例程声明了两个 SET 变量,ab,每一个都具有一组 SMALLINT 值。第一个 SELECT 语句把 table1 一行中的 SET 列复制到变量 b。然后例程声明了一个名为 cursor1 的游标,它一次把一个元素从 b复制到 SET 变量 a。当游标位于值为 4 的元素时,DELETE 语句就从 SET 变量 b 中删除这个元素。最后,UPDATE 语句把表 table1 的这一行用存储在变量 b 中的新集合替代。

有关如何在 SPL 例程中使用集合变量的信息,请参阅 GBase 8s SQL 教程指南