关闭 Insert 游标
由于 GBase 8s 在 SPL 例程中不支持 Insert 游标,本节有关 Insert 游标的讨论仅适用于 GBase 8s ESQL/C。在 SPL 例程中,只能执行 DECLARE 语句定义的 Select 或 Function 游标的 CLOSE 语句。(SPL 的 FOREACH 语句在其语句块中包含 INSERT 语句可以声明功能类似 Insert 游标的 direct cursor ,但是不能执行 FOREACH 声明的直接定位游标的 CLOSE 语句。 GBase 8s 在程序控制从定义直接定位游标的 FOREACH 循环退出时,会自动关闭该直接定位游 标。)
在 GBase 8s ESQL/C 中,CLOSE 语句对待与 INSERT 语句关联的游标和与 SELECT 、 EXECUTE FUNCTION 或 EXECUTE PROCEDURE 语句关联的游标不同。当游标标识与 INSERT 语句关联时,CLOSE 语句将任何剩下的已缓冲行写入数据库。在 sqlca 结构中 sqlerrd 数组的第 三个元素 sqlca.sqlerrd[2] 中返回成功插入数据库的行数。有关如何使用 SQLERRD 对插入的总 行数计数的信息,请参阅 错误检查 。
sqlca 结构的 SQLCODE 字段,指示了 Insert 游标 CLOSE 语句的结果。如果所有已缓冲的行成 功插入,则 SQLCODE 被置零。如果遇到错误,则 SQLCODE 字段被设为负的错误消息数。
当 SQLCODE 为零时,释放行缓冲区空间,且关闭游标;也就是,您无法执行指定游标的 PUT 或 FLUSH 语句,直到您重新打开它。
提示: 如果遇到 sqlca.SQLCODE 错误,则还会存在对应的 SQLSTATE 错误值。关于如果获得消息 文本的信息,请检查 GET DIAGNOSTICS 语句。
如果插入不成功,则成功插入的行数存储在 sqlerrd 中。在最后成功插入的行之后的任何已缓冲行 被废弃。由于插入失败,CLOSE 语句也失败,并且游标没有关闭。例如,如果磁盘空间不足而使 得某些行无法插入,则 CLOSE 语句会失败。在这种情况中,第二个 CLOSE 语句可能成功,因为 不存在已缓冲的行。OPEN 语句也会成功,因为 OPEN 语句执行了一个隐式关闭。