ABAP 在 HANA 中使用主键进行选择,将条件应用于整个主键

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

有没有办法实现完整的主键选择?我将在下面几行中更详细地解释它。

我必须使用游标按顺序处理表的所有记录,如果该过程因错误而结束(转储、系统崩溃、系统启动...),我们希望在我们停止的地方重新启动该过程,所以当游标块结束时,我们将在系统中持久地标记它。该过程的下一次执行将查找先前未完成的执行,以从该点开始选择。我的问题是该表有一个多列主键。

选择始终按主键顺序,有没有办法表达 where 条件,我可以指定在所述主键之后立即开始?无需手动丢弃所有以前的记录。

如果我有一个以 A 列和 B 列作为主键且包含以下数据的表:

A B
1 1
1 2
1 3
1 4
2 1
2 2
3 3
5 4

我运行该进程并完成了第 5 行 (2,1) 的处理,该进程在完成整个集合之前结束,我想再次运行它。如果我用经典的 where 来做,我必须输入: A > 2 或( A = 2 且 B > 1 )。

使用 2 列很容易,但是如果列数很多,我们就必须编写一个复杂的表达式。另外,我们动态处理表,由于我们要处理N张表,所以该过程必须动态构建where条件。此外,这种情况肯定会对性能产生影响。

提前致谢

where-clause abap hana composite-primary-key
1个回答
0
投票

我的理解正确吗? 假设 1/4(A/B 值)失败了您想要的

  • 找到1/3(最后成功)
  • 根据1/3找到下一条记录(假设已经失败)1/4并从那里开始。

您所说的

A > 2 or ( A = 2 and B > 1 )
是通过主键执行此操作的唯一有效方法,不涉及辅助表。如果这不是一种可行的方法(字段太多或其他限制),您应该考虑其他方法来查询该数据,例如
select ... where A > '1' completed = ' '
(使用左侧尽可能多的字段来完全指定并过滤其余字段)按状态)。

从长远来看,我建议实施某种批次管理,在处理之前决定批次中包含哪些内容(而不是逐条记录)。在设计批次的过程中,您最终将找到一种有效的方法来对数据进行分组(也许一次处理具有相同 A 的所有记录,或者 A 和 B 的第一个符号,或者甚至可能只是 A 但将部分除以固定数量的记录)。在这方面我无能为力,因为这需要深入分析。

无论如何,使用额外的表格来记录批次及其状态,您的解决方案最终可能会更容易理解并在以后进行故障排除。

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