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 就没有删除。