我在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可能会以不同的方式处理它。
答案 0 :(得分:2)
我在你的交叉帖子中回答了这个问题:http://www.saphana.com/message/13458#13458
为方便起见,这里是从链接中复制的内容:
锁是在事务的上下文中处理的 - 而不是命令。
因此,即使您将自动提交设置为on(这是会话级设置),也会执行过程调用(包括在其间调用的所有其他过程),并且只有在事务完成之后(通过ROLLBACK或COMMIT)
随之释放所有锁。
所以,是的,锁定在“内部”调用中的行仍将被锁定在“外部”调用中。
但是,由于这只是一个单一的交易,“外部”通话当然可以访问由“内部”通话锁定的记录。