如何在不使用 MODIFY 的情况下更新内部 table?

How to update internal table without using MODIFY?

我创建了内部 tables,我想通过从另一个 table 计算更新一个内部 table 中员工的年龄,我进行了算术计算以获得年龄但是现在我该如何通过其他方式更新它而不是 MODIFY?

WRITE : / 'FirstName','LastName', '  Age'.  
LOOP AT gt_items1 INTO gwa_items1.
  READ TABLE gt_header INTO gwa_header WITH KEY empid = gwa_items1-empid.
  gwa_items1-age = gv_date+0(4) - gwa_header-bdate+0(4).
        
  MODIFY gt_items1 from gwa_items1 TRANSPORTING age WHERE empid = gwa_items1-empid.
  WRITE : /  gwa_items1-fname , gwa_items1-lname , gwa_items1-age .
ENDLOOP.

通过在内部 tables 上循环使用字段符号(而不是工作区):

WRITE : / 'FirstName','LastName', '  Age'.  
LOOP AT gt_items1 
     ASSIGNING FIELD-SYMBOL(<ls_item1>).
  READ TABLE gt_header 
       ASSIGNING FIELD-SYMBOL(<ls_header>) 
       WITH KEY empid = <ls_item1>-empid.
  IF sy-subrc EQ 0.
    <ls_item1>-age = gv_date+0(4) - <ls_header>-bdate+0(4).
    WRITE : /  <ls_item1>-fname , <ls_item1>-lname , <ls_item1>-age .
  ENDIF.
ENDLOOP.

字段符号有两个优点:

  • 他们直接修改内部table,没有单独的MODIFY 必要的。

  • 它们比工作区要快一些。

除了József Szikszai的回答你还可以参考:

write : / 'FirstName','LastName', '  Age'.

sort gt_header by empid. " <------------- Sort for binary search

loop at gt_items1 reference into data(r_item1).

  read table gt_header reference into data(r_header)
       with key empid = r_item1->empid binary search. " <------------- Faster read

  check sy-subrc eq 0. 

  r_item1->age = gv_date+0(4) - r_header->bdate+0(4).
  write : /  r_item1->fname , r_item1->lname , r_item1->age .
endloop.

我还对您的代码进行了一些改进。

有关详细信息,请查看此 link