Oracle存储过程中的事务如何工作?有隐含的交易吗?

时间:2010-10-04 08:59:31

标签: sql oracle

在Oracle存储过程中,如何编写事务?我是否需要明确地执行此操作,还是Oracle会自动锁定行?

2 个答案:

答案 0 :(得分:13)

您可能想要浏览concept guide,特别是关于transactions的章节:

  

事务是一个逻辑工作单元,包含一个或多个由单个用户运行的SQL语句。 [...]事务以用户的第一个可执行SQL语句开始。当事务由该用户显式提交或回滚时,事务结束。

您无需明确启动交易,而是自动完成。您必须使用提交(或回滚)指定事务的结束。

锁定机制是数据库的基本组成部分,请在Data Concurrency and Consistency一章中阅读。


关于存储过程

存储过程是一组语句,它们在与调用会话(*)相同的事务中执行。通常,事务控制(提交和回滚)属于调用应用程序。调用应用程序具有更广泛的过程视图(可能涉及多个存储过程),因此可以更好地确定数据是否处于一致状态。虽然您可以在存储过程中提交,但这不是常态。

(*)除非过程被声明为自治事务,在这种情况下,过程作为独立会话执行(感谢be here now,现在我看到了你的观点)。

答案 1 :(得分:1)

@AdamStevenson关于DDL,概念指南中有一个引用:

  

如果       当前事务包含任何DML语句,Oracle首先提交   该       事务,然后运行并提交DDL语句作为新的,   单       声明交易。

因此,如果您在DDL语句之前启动了一个事务(例如,编写了一个INSERT,UPDATE,DELETE,MERGE语句),那么启动的事务将被隐式提交 - 在处理DML语句时应始终牢记这一点。

我同意Vincent Malgrat的说法,您可能会在概念指南中找到有关交易处理的一些非常有用的信息。