ABAP 7.4如何从一个tab填充另一个tab ?



考虑,我有GT_KUNNR内部表如下:

<表类> KUNNR 文本 tbody><<tr>123演示文本456测试发票

如果您希望使用构造函数操作符完成此操作,则可以使用对应操作符和查找表。

但是请注意,这要求两个表之间的链接条件(kunnr = kunnr)使用查找表中的表键。这意味着查找表(在本例中为gt_text)必须是SORTED TABLEHASHED TABLE,kunnr作为关键字段,或者它至少有一个匹配条件的SECONDARY KEY

" Declarations:
TYPES:
BEGIN OF kunnr_struct,
kunnr TYPE kunnr,
text TYPE string,
END OF kunnr_struct,
kunnr_tbl TYPE STANDARD TABLE OF kunnr_struct WITH DEFAULT KEY,
BEGIN OF text_struct,
kunnr TYPE kunnr,
text TYPE string,
expired TYPE abap_bool,
END OF text_struct,
text_tbl TYPE HASHED TABLE OF text_struct WITH UNIQUE KEY kunnr. " <- Important!
" Test data:
DATA(gt_kunnr) = VALUE kunnr_tbl(
( kunnr = '123' text = 'demo text'  )
( kunnr = '456' text = 'text inv')
).
DATA(gt_text) = VALUE text_tbl(
( kunnr = '123' text = 'welcome' expired = abap_true )
).
" The actual code you asked for:
gt_kunnr = CORRESPONDING kunnr_tbl(
gt_kunnr FROM gt_text USING kunnr = kunnr ).

我的理解是,构造函数表达式(VALUE,FOR,REDUCE..)创建了一个新的类型,我不需要(基本上,GT_KUNNR正在更新,可以有巨大的记录。

这并没有创建一个新的类型,但是根据我上面链接的文档,它确实在内存中创建了一个带有结果的临时表。这不太可能是性能问题(运行时的增加在最坏的情况下可能是线性的),但它可能会使使用的内存增加一倍,因此对于非常大的数据集,它可能成为内存问题。

如果这是您的用例关心的问题,那么您可以继续使用带有循环的变体。如果您不想使用字段符号,那么您可以按照许多现代ABAP样式指南(如SAP本身的这一指南)的建议,尽可能使用引用而不是字段符号。使用引用的问题代码看起来像这样:

LOOP AT gt_kunnr REFERENCE INTO DATA(lrs_kunnr).
READ TABLE gt_text REFERENCE INTO DATA(lrs_text) WITH KEY kunnr = lrs_kunnr->kunnr BINARY SEARCH.
IF sy-subrc EQ 0.
lrs_kunnr->text = lrs_text->text.
ENDIF.
ENDLOOP.

最新更新