【发布时间】:2011-04-23 22:32:06
【问题描述】:
我第一次尝试在 Oracle SQL 中使用事务功能,但似乎找不到很好的解释。我了解开始一个新会话将开始一个新事务。我也明白提交/回滚是用来结束它的。我想要做的是执行两个语句,如果我其中一个失败,撤消他们可能所做的任何更改并继续执行。如何检查这种情况并相应地发出提交或回滚?
【问题讨论】:
标签: sql oracle transactions
我第一次尝试在 Oracle SQL 中使用事务功能,但似乎找不到很好的解释。我了解开始一个新会话将开始一个新事务。我也明白提交/回滚是用来结束它的。我想要做的是执行两个语句,如果我其中一个失败,撤消他们可能所做的任何更改并继续执行。如何检查这种情况并相应地发出提交或回滚?
【问题讨论】:
标签: sql oracle transactions
使用 PL/SQL 块并编写如下内容:
begin
statement_zero;
savepoint my_savepoint;
begin
-- if either of these fail, then exception section will be executed
statement_one;
statement_two;
exception
when others then
rollback to my_savepoint;
end;
statement_three;
commit;
end;
【讨论】:
EXECUTE IMMEDIATE 'ALTER TABLE foo ADD x NUMBER'。但这并没有改变 DDL 语句在更新数据字典之前和之后执行 COMMIT 的事实。
ObiWanKenobi 提供了一个很好的示例,可以在 Oracle 概念指南的 Chapter 4 找到 Oracle 事务的详细说明(我提供的链接适用于 10.2,您可以在 Oracle 网站上找到适合您版本的文档以及)。我建议您阅读本章以了解 Oracle 如何处理事务管理,整个文档对于了解 Oracle DB 的工作原理非常有用。
【讨论】: