如何使用更新游标的一个最终的假设示例提出一个问题,使用已建立的数据库不应出现该
问题,但在应用程序的初始设计阶段可能出现。
在该示例中,创建并操纵一个名为 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;
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 241 -
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;