是否在存储过程结束时释放“select for update”获得的锁,即使嵌套在另一个SP中也是如此?

时间:2014-10-23 09:50:28

标签: sql stored-procedures hana

我在SAP HANA DB SP8上。嵌套存储过程时如何处理锁?

更具体地说:我有一个名为p_outer的SP,它调用另一个名为p_inner的SP。 p_inner通过T锁定一行表select ... for update。在p_inner返回p_outer后,T中的行仍会被锁定吗? p_inner中没有明确的提交语句。服务器的自动提交设置可能设置为false,但这有关系吗?

我没有发现这个特定问题的记录,也没有找到专门针对SAP HANA的先前材料。其他DBM可能会以不同的方式处理它。

1 个答案:

答案 0 :(得分:2)

我在你的交叉帖子中回答了这个问题:http://www.saphana.com/message/13458#13458

为方便起见,这里是从链接中复制的内容:

锁是在事务的上下文中处理的 - 而不是命令。

因此,即使您将自动提交设置为on(这是会话级设置),也会执行过程调用(包括在其间调用的所有其他过程),并且只有在事务完成之后(通过ROLLBACK或COMMIT)

随之释放所有锁。

所以,是的,锁定在“内部”调用中的行仍将被锁定在“外部”调用中。

但是,由于这只是一个单一的交易,“外部”通话当然可以访问由“内部”通话锁定的记录。