在当前的LUW中读取原始(变更前)DB值?

问题描述 投票:8回答:1

在当前LUW中,当一个表已经被改变,但还没有提交时,是否可以检索它的旧值或原始值?

我正在实现一个BAdI,这个BAdI应该是用来根据对对象的更改而发出消息的,但是SAP实际上并没有在BAdI中提供原始的对象数据。试图用 SELECT 语句不工作,因为在那个时候,待定的更改已经被应用,只是没有提交。

如果我调试代码,我可以看到旧的值在 SE16 但似乎未提交的更改值被任何的 SELECTs 我在这个BAdI中执行。

有什么方法可以读取这些原始数据吗?

sap abap opensql badi
1个回答
12
投票

在同一个数据库LUW期间,读取之前更新过的表,总是会返回更新后的值。所以,至少需要从另一个数据库LUW中读取表。

读取表的过程中,在同一个数据库LUW中,总是会返回更新后的值。隔离度 的默认使用取决于您使用的数据库类型。对于HANA和Oracle,默认使用 "committed read",但其他数据库默认使用 "uncommitted read"。

如果不使用HANAOracle,可以通过调用函数模块DB_SET_ISOLATION_LEVEL来临时切换到 "committed read "隔离级别。

然后,可以从另一个数据库LUW中读取表,通过用 服务连接 前缀为R3*),例如。SELECT ... FROM yourtable ... CONNECTION ('R/3*temp') ...

© www.soinside.com 2019 - 2024. All rights reserved.