点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我一直在阅读ABAP 740读取表语句。
问题:
我有一个zfield,其中field1到field10仅以field1作为主键。
1)我正在通过程序中的一个itab读取"带有键field2 =变量(从wa循环)将表读入wa"
此field2未指定为key,所以我将获得第一个找到的行,对吧? 如果是,我的推导结果可能正确或错误。
2)还是应该将其声明为"具有非唯一排序键field2_field3 COMPONENTS field2 field3。
3)因为我将不得不在代码中多次读取具有field2或field3的itab。
由于field2不是主键的一部分,并且不存在辅助键,因此您当前唯一的选择是使用" WITH KEY field2",这将导致顺序搜索循环遍历该记录的所有记录。 直到找到第一个匹配记录为止。 因此,如果没有匹配项或完全匹配项,则您的结果将绝对正确。 如果有多个匹配项,则取决于您的要求是一个匹配项是正确的匹配项,还是是否需要对另一个匹配项都进行评估。 在最坏的情况下,如果没有匹配项,则必须对表中的所有记录执行搜索,导致最坏情况下的性能为O(n),而n是记录数。
< pre>" 2)还是我应该声明为"使用非唯一已排序的密钥field2_field3组件field2 field3。 "如何使用主键和辅助键定义两个字段的表类型的示例 带有唯一键字段的表类型的数据表类型排序表 使用非唯一的已排序键field2_field3组件field2 field3。 " READ语句仅基于部分辅助键匹配记录 使用键将表读入表field2_field3 COMPONENTS field2 =变量。 如果sy-subrc = 0。 " ... ENDIF。它的结果几乎与上面的READ语句具有"相同"的结果,但没有辅助键,但是在有大量记录的情况下,性能会更好(与之相关的数千条记录甚至更多) 用于计算的"等待时间",并且在找到第一个匹配记录时也将停止搜索,但是如果存在多个匹配项,则可能与上述语句找到的记录不同,因为该搜索 逻辑。
区别在于,在这种情况下,对表记录执行二进制搜索,始终将搜索分为两等份,从中间开始,具体取决于当前记录字段 小于或大于搜索词,它将在上部或下部继续搜索。因此,在这种情况下,最差情况的性能仅是O(log n)的对数。
(请注意, 在这种情况下,即使仅使用部分键,也可以访问READ语句中的键组件
您还没有完整地描述您的需求,但是从我得到的结果来看,为了根据变量评估field2的所有可能匹配,通过记录的LOOP可能会更好。
(请注意,在这种情况下,即使仅使用部分键,LOOP语句中的键组件也将按从所有组件的第一到最后或部分的第一到最后的分配顺序进行访问
并且如果您必须分别基于field2或field3进行阅读,并且想要使用辅助键,则必须创建用于分隔field2和field3的键,以便可以访问它们
Sandra Rossi 我肯定会,谢谢。。 >
Michael Piesche :感谢您的解释,我现在完全明白了。
另一个问题。
我尝试了下面的新表表达式(用引号引起来)而不是读取。 我想念什么吗?
如果tab1不仅是表,而且标题行为" WITH HEADER",则只能设置tab1-zzprdgrp 声明时为" LINE"。 但是该概念不再使用,因为您仍然必须从标题行结构更新到您所引用表中的实际记录。
相反,字段符号要好得多, 因为在这种情况下,对表的实际记录的"引用"以及对字段符号的任何更改也对表的记录进行了更改。
因此,我选择写 您的代码是这样的:
一周热门 更多>