Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - SQL 用法 » 存储过程、触发器、批处理和用户定义的函数 » 控制语句

 

原子复合语句

原子语句是或者完全执行,或者根本不执行的语句。例如,更新数千行的 UPDATE 语句在更新许多行后可能会遇到错误。如果该语句没有完成,则所有更改的行都恢复为其初始状态。UPDATE 语句即是原子语句。

所有非复合 SQL 语句都是原子语句。可以通过在 BEGIN 关键字后添加 ATOMIC 关键字来使复合语句成为原子语句。

BEGIN ATOMIC
   UPDATE Employees
   SET ManagerID = 501
   WHERE EmployeeID = 467;
    UPDATE Employees
   SET BirthDate = 'bad_data';
END

在此示例中,两个更新语句都属于原子复合语句。它们要么成功,要么失败,二者只能居其一。第一个更新语句将是成功的。第二个语句会引发数据转换错误,因为指派给 BirthDate 列的值无法转换为日期。

该原子复合语句会失败,因此两个 UPDATE 语句的结果都会被撤消。即使当前执行的事务最终被提交,原子复合语句中的这两个语句也都不会生效。

如果原子复合语句成功,则在复合语句中进行的更改直到当前执行的事务被提交的时候才会生效。如果原子复合语句成功而包含该语句的事务却回退,则原子复合语句也回退。在原子复合语句开始时建立一个保存点。语句中的任何错误都会导致回退到该保存点。

在自动提交(非链接)模式下执行原子复合语句时,直到完成语句执行后提交模式才变为到手动(链接)。在手动模式中,在原子复合语句中执行的 DML 语句不会引起快速 COMMIT 或 ROLLBACK。如果原子复合语句成功完成,将执行 COMMIT 语句;否则执行 ROLLBACK 语句。

在原子复合语句中不能使用 COMMIT 和 ROLLBACK 以及某些 ROLLBACK TO SAVEPOINT 语句。

 另请参见