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

Ada*_*son 6 sql oracle

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

Vin*_*rat 13

您可能希望浏览概念指南,特别是有关交易的章节:

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

您不必明确地启动事务,它会自动完成.您必须使用提交(或回滚)指定事务的结束.

锁定机制是数据库的基本组成部分,请参阅数据并发和一致性一章.


关于存储过程

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

(*)除非程序被声明为自主交易,在这种情况下程序作为一个独立的会话执行(多亏现在,现在我明白你的观点).

  • @AdamStevenson - 如果过程中没有提交,则事务将由调用它的会话结束; 任何锁都将被保留,直到会话发出提交(或回滚).如果它没有明确地这样做,那么会话将在它结束时隐式执行提交或回滚,具体取决于它的终止方式.在过程调用之前,事务可能存在.该过程是事务中的一个语句. (3认同)