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

假设把表 table1 某一行的 set_col 列定义为 SET ,并且有一行的值为 {1,8,4,5,2}。下面的 GBase 8s ESQL/C 代码段使用更新游标以及带有 WHERE CURRENT OF 子句的 DELETE 语句来删除值为 4 的元素:
EXEC SQL BEGIN DECLARE SECTION;
          client collection set(smallint not null) a_set;
          int an_int;
          EXEC SQL END DECLARE SECTION;
          ...
          EXEC SQL allocate collection :a_set; 
          EXEC SQL select set_col into :a_set from table1 where int_col = 6;
          EXEC SQL declare set_curs cursor for
          select * from table(:a_set) for update;
          
          EXEC SQL open set_curs;
          while (i<coll_size)
          {
          EXEC SQL fetch set_curs into :an_int;
          if (an_int = 4)
          {
          EXEC SQL delete from table(:a_set) where current of set_curs;
          break;
          }
          i++;
          }
EXEC SQL update table1 set set_col = :a_set 
            where int_col = 6;
            EXEC SQL deallocate collection :a_set;
            EXEC SQL close set_curs;
            EXEC SQL free set_curs;

执行 DELETE 语句以后,集合变量包含元素 {1,8,5,2}。位于代码段末尾的 UPDATE 语句把修改后的集合保存到 set_col 列中。如果没有 UPDATE 语句,集合列中的元素 4 就没有删除。