【问题标题】:Commit for one table提交一张桌子
【发布时间】:2014-07-13 16:35:38
【问题描述】:

是否可以只对选定的表执行提交?

我的问题是我不知道进程是否更新了更多表,所以我想阻止我的提交更新它们!

它是批量处理,在处理结束时它会调用提交(逻辑上)。

那么有没有办法更新一个特殊的表而不是全部?

案例:大规模处理运行,就像我工作的那样,在其最后进行了更新。

我们/我的代码只是一个具有多个功能的 BAdI 实现。获取特定数据需要向其他系统发起请求,该请求不能在历史日志中留下任何足迹,因此必须回滚请求,以免将其持久化到系统中。

此请求用于工作项条目。因此,如果我处理 1 个数据集并生成一个工作项,则该工作项将被注册以在运行后抛出。在处理2º数据集并向其他系统发出请求时,我必须回滚它,但第一数量数据集的工作项条目将被删除(回滚)。

是否可以通过直接提交进行这些更新? -> 没有。

我不能简单地管理表以使用内部表进行更新并在运行结束时更新它们吗? -> 不,因为那些课程不属于我们。

为什么我不简单地在运行结束时进行回滚? -> 这些类不属于我们,否则必须更改整个质量处理结构。

【问题讨论】:

  • 请尝试找出术语参照完整性的含义,然后请给出一个很好的理由说明您显然愿意破坏它。
  • @DientesDeCheto Dientes de un cheto, esto suena argentino ;-)
  • 似乎在您的 BAdI 中记录此外部调用完全不受您的控制,因此我认为您无法在这里实现您想要的。据我了解,日志记录不在您的 BAdI 中,而是在此外部调用的方法/功能模块中。不修改这条逻辑,就无法摆脱这条日志。另一个问题,你为什么要完全摆脱这个痕迹?如果发生了重要的事情,那么它应该在正常情况下记录。

标签: commit abap opensql


【解决方案1】:

作为程序员,您可以控制并且应该知道正在更新什么。如果您将代码构建到 LUW 中,那么您可以控制正在更新哪些表以及在什么时候捕获仍然允许适当回滚的错误。所以上面给出了关于 commit 语句的具体答案,但作为程序员,您可以将语句分组以完成相同的操作。

稍后.....

【讨论】:

  • 有用的建议,但对我来说不是。为了更好地理解问题,我实现了我的条目!请考虑您的实际答案。
【解决方案2】:

AFAIK 在调用提交的那一刻,该提交语句之前和最后一次提交之后的所有 DML 都将提交到数据库。因此,如果在您的提交之后有更多的提交,那么它们不会受到您的提交的影响,您的提交也不会影响他们的提交,除非当然有回滚的条件。

【讨论】:

  • 所以这意味着,如果我执行我的提交,之前完成的所有数据库更改都会更新......进一步回滚不会影响我的提交(我知道的方式)。所以没有办法用相应的提交进行一次更新!
  • 例如,如果是 oracle,请查看 docs.oracle.com/cd/B19306_01/appdev.102/b14261/…
猜你喜欢
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2017-02-07
  • 2011-11-17
  • 2011-10-09
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多