联接vs对于所有条目-错误处理/未找到记录

2020-09-10 21:15发布

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

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


亲爱的

成为一个好公民之类的人,我知道应该朝着使用联接甚至代码下推而不是FAE的方向努力。

但是,后者似乎更适合进行更用户友好的错误处理。

假设我有以下联接(为简化起见,简化了)

选择q〜qmnum
 从qmel AS q
 内联ihpa AS i
 开q〜objnr = i〜objnr
 q〜qmnum输入@it_qmnum_range
 AND i〜parvw ='Y4'
 插入表@DATA(lt_notification)。

因此,我本质上想获取所有服务通知,其中已为特定的合作伙伴类型(技术人员= Y4)分配了任务。

使用上述连接执行此操作后,如果出现某些故障,我不知道是否由于通知号不在" it_qmnum_range"范围内而失败,或者在" ihpa"中找不到" Y4"条目,

如果我要去FAE,我可以解决,准确找出问题出在哪里,并向用户返还有意义的错误。

如何在仍然选择联接/下推代码的同时克服此类问题。


欢呼

Jens

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

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


亲爱的

成为一个好公民之类的人,我知道应该朝着使用联接甚至代码下推而不是FAE的方向努力。

但是,后者似乎更适合进行更用户友好的错误处理。

假设我有以下联接(为简化起见,简化了)

选择q〜qmnum
 从qmel AS q
 内联ihpa AS i
 开q〜objnr = i〜objnr
 q〜qmnum输入@it_qmnum_range
 AND i〜parvw ='Y4'
 插入表@DATA(lt_notification)。

因此,我本质上想获取所有服务通知,其中已为特定的合作伙伴类型(技术人员= Y4)分配了任务。

使用上述连接执行此操作后,如果出现某些故障,我不知道是否由于通知号不在" it_qmnum_range"范围内而失败,或者在" ihpa"中找不到" Y4"条目,

如果我要去FAE,我可以解决,准确找出问题出在哪里,并向用户返还有意义的错误。

如何在仍然选择联接/下推代码的同时克服此类问题。


欢呼

Jens

付费偷看设置
发送
6条回答
大圣 - sap领域执行人,9年sap运营经验
1楼 · 2020-09-10 21:50.采纳回答

空结果集不是失败的联接。
联接操作正确(并希望很快)可以确定记录的无组合是否符合提供的条件。

现在,您想获取有关为什么会这样的更多信息。

p>

您可以检查查询中的每个过滤条件是否(单独使用)是否会产生非空结果。 那有帮助吗? 不可以,因为筛选出特定记录的原因很可能是所有筛选器(或仅某些筛选器)的组合。

到那时,要提供关于为什么未在结果集中包含某些记录的简明反馈,您将必须通过所有过滤器组合进行工作,这对于"错误处理"而言可能会变得很复杂。

在"一般情况"中是如此。

对于您的示例,您要做的(这就是我的假设)是,一旦发现结果集是 如果为空,则您的代码将检查IPHA是否具有PARVW ='Y4'的任何条目,以及QMEL是否返回QMNUM_RANGE的任何记录。 您可以通过运行两个附加语句来使用SQL进行完全相同的操作。

除此以外,我必须承认,我之前和之前都没有看到过"为什么找不到"的要求 对于我来说,获取服务通知的示例并没有发生,最终用户希望/需要解释为什么没有通知。

除了"可能很好"这一点之外: 在什么情况下,您会为用户提供这种反馈?

CPLASF-自律
2楼-- · 2020-09-10 22:05

您可以尝试SELECT ... ENDSELECT并在选择循环中处理检查。

微wx笑
3楼-- · 2020-09-10 22:07

使用右外连接吗?

歪着头看世界
4楼-- · 2020-09-10 21:54

代码应保持高效(通过联接),通常没有兴趣解释失败的确切原因是什么。 我认为对于开发人员(或具有技术知识的测试人员)分析SQL失败的原因更有用。 也许是一种工具。 数据库系统没有提供一个吗?

SAP浪
5楼-- · 2020-09-10 21:50

嗨,詹斯,

如果每个表中至少选择一个记录,则可以使用LEFT JOIN返回QMEL的所有现有记录,并且如果IHPA中没有相应的记录,则该表的字段将返回空(初始)值。 然后,您可以稍后检查是否根本没有记录,或者QMEL中是否有记录,而IHPA中没有匹配的记录。

选择q〜qmnum i〜parvw
   插入表@DATA(lt_notification)。
   从qmel AS q
   左加入ihpa as i ON q〜objnr = i〜objnr
  q〜qmnum输入@it_qmnum_range
    和i〜parvw ='Y4'。
zhangjiyang1323
6楼-- · 2020-09-10 22:00

可惜一个人不能发表评论并接受它。 总的来说,我认为您的方法是最明智的。 当然要感谢 Matthew Billingham Rafael Figueiredo 为我将要前往的一般方向提供输入。

再次感谢您,将实现此目标,并查看测试完成后/我们的工作效率如何。 将尝试记住更新此线程

干杯

Jens

一周热门 更多>