PUT 和 FLUSH 之后的状态代码

当程序执行 PUT 语句时,程序应测试是否成功地将该行放入缓冲区中。如果新的行适合该缓冲区,则 PUT 的唯一操作就是将该行复制到缓冲区。在此情况下不可发生错误。然而,如果该行不适合,则为了插入将整个缓冲区负载传到数据库服务器,可发生错误。

返回到“SQL 通信区域”(SQLCA)内的值为程序提供它需要的信息,来整理每一种情况。如果未发生错误,则在每个 PUT 语句之后,将 SQLCODE 和 SQLSTATE 设置为零,如果发生错误,则设置为负的错误代码。

数据库服务器将 SQLERRD 的第三个元素设置为实际插入到表内的行数,如下
  • 零,如果仅将新行移至缓冲区
  • 缓冲区中的行数,如果插入缓冲区负载而未发生错误
  • 错误发生之前插入了的行数,如果发生错误

请再次阅读代码来了解如何使用 SQLCODE(请参阅前面的示例)。首先,如果 OPEN 语句发生错误,则由于 WHILE 条件失败,不执行该循环,则不执行 FLUSH 操作,且该事务回滚。其次,如果 PUT 语句返回一个错误,则由于 WHILE 条件的缘故结束该循环,不执行 FLUSH 操作,且该事务回滚。仅当该循环至少一次生成足够的行来填充缓冲区,此条件才可发生。否则,PUT 语句不可生成错误。

程序可能结束该循环,而这些行还在缓冲区中,可能未插入任何行。此时,SQL 状态为零,且发生 FLUSH 操作。如果 FLUSH 操作产生一错误代码,则该事务回滚。仅当成功地执行所有操作,才提交该事务。