清理表

如何使用更新游标的一个最终的假设示例提出一个问题,使用已建立的数据库不应出现该问题,但在应用程序的初始设计阶段可能出现。

在该示例中,创建并操纵一个名为 target 的大型表。字符列 dactyl 无意中获得一些空值。应删除这些行。此外,使用 ALTER TABLE 语句将新列 serials 添加到表。此列将安装唯一的整数值。下列示例展示您用来完成这些任务的 GBase 8s ESQL/C 代码:
EXEC SQL BEGIN DECLARE SECTION;
          char dcol[80];
          short dcolint;
          int sequence;
          EXEC SQL END DECLARE SECTION;
          
          EXEC SQL DECLARE target_row CURSOR FOR
          SELECT datcol
          INTO :dcol:dcolint
          FROM target
          FOR UPDATE OF serials;
          EXEC SQL BEGIN WORK;
          EXEC SQL OPEN target_row;
          if (sqlca.sqlcode == 0) EXEC SQL FETCH NEXT target_row;
          for(sequence = 1; sqlca.sqlcode == 0; ++sequence)
          {
          if (dcolint < 0) /* null datcol */
          EXEC SQL DELETE WHERE CURRENT OF target_row;
          else
          EXEC SQL UPDATE target SET serials = :sequence
          WHERE CURRENT OF target_row;
          }
          if (sqlca.sqlcode >= 0)
          EXEC SQL COMMIT WORK;
          else EXEC SQL ROLLBACK WORK;