在Oracle存储过程中,如何编写事务?我是否需要明确地执行此操作,还是Oracle会自动锁定行?
答案 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的说法,您可能会在概念指南中找到有关交易处理的一些非常有用的信息。