JDBC适配器选择和更新查询期间的数据不一致

2020-09-10 16:21发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我有关于发件人JDB...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有关于发件人JDBC通道中SELECT和UPDATE查询的执行的查询。 考虑下面的一个示例,该示例包含100条记录,并且flag = unread:

1。 在10:00:00 AM,SELECT查询读取带有flag ='unread'

的100条记录

2。 在10:00:01 AM,某些程序插入了10个带有flag ='unread'的新记录

3。 在10:00:02 AM,执行Update查询并更新了带有flag ='unread'

的110条记录

这将导致数据不一致,因为它仅需要更新100条记录,而正在更新110条记录。 我们如何确保Update查询仅更新SELECT查询读取的那些记录。

此致

Shankul

4条回答
软件心理学工程师
2020-09-10 17:19 .采纳回答

您好Shankul!

831162-常见问题解答:XI 3.0/PI 7.0/PI 7.1/PI 7.3 JDBC适配器:

8。 事务处理(发送方)

问:如果我在JDBC发送方中配置了以下内容,请执行以下操作: 选择查询: SELECTNAME从TABLENAME WHERE FLAG =" TRUE" 更新查询: UPDATE TABLENAME SET FLAG =" FALSE",WHERE FLAG =" TRUE" 我怎么知道JDBC适配器不会更新在初始SELECT查询中未读取的新添加的行(在执行SELECT和UPDATE查询的时间范围之间添加的行)?

A:SELECT和UPDATE在同一个数据库事务中运行,即两个语句在数据库上的视图相同。 确保两个语句使用相同的WHERE子句。 这种情况下正确操作的另一个要求是在数据库上配置适当的事务隔离级别(即repeatable_read或可序列化)。 您也可以考虑使用" SELECT FOR UPDATE"语句代替普通的SELECT语句,以确保正确锁定数据库。 MS SQL数据库中不支持" SELECT FOR UPDATE"。 在这种情况下,请在数据库上使用适当的事务隔离级别。 有关更多详细信息,请与您的数据库供应商联系。 如果您的源数据库是IBM i的DB2,请阅读SAP注释 2295028

关于,Evgeniy。

一周热门 更多>