DELETE 语句 / 直接删除 |
EXEC SQL begin work; /* 开启事务 */ EXEC SQL delete from items where order_num = :onum; del_result = sqlca.sqlcode; /* 保存两个错误 */ del_isamno = sqlca.sqlerrd[1]; /* 代码编号 */ del_rowcnt = sqlca.sqlerrd[2]; /* 以及行的计数 */ if (del_result < 0) /* 发现的问题:*/ EXEC SQL rollback work; /* 恢复一切 */ else /* 一切正常:*/ EXEC SQL commit work; /* 结束事务 */
此示例中的关键在于,在程序结束该事务之前,它将重要的返回值保存在 sqlca 结构中。像其他 SQL 语句一样,ROLLBACK WORK 和 COMMIT WORK 语句都在 sqlca 结构中设置返回代码。然而,如果您想要报告错误生成的代码,则必须在执行 ROLLBACK WORK 之前保存它们。ROLLBACK WORK 语句移除所有暂挂的事务,包括它的错误代码。
使用事务的优势在于,不管发生什么错误,数据库都处于已知的、可预测的状态。不存在修改完成了多少的问题;要不就是都完成了,要不就是都没完成。
在带有日志记录的数据库中,如果用户未启动一个显式的事务,则数据库服务器在语句执行之前初始化一个内部的事务,并在执行完成或失败后终止该事务。如果语句执行成功,则提交该内部的事务。如果语句失败,则回滚该内部的事务。