ABAP 7.4语法-FOR循环迭代

2020-08-21 19:04发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 我在博客中读到了有关...

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

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


专家们,

我在博客中读到了有关如何在For循环迭代中使用并行游标填充内部表的信息。 在下面共享示例代码。

 *使用"平行游标"基于EKKO,EKPO,MAKT和T001W的数据填充最终表

 DATA(lt_final)= VALUE ty_t_final(FOR ls_ekpo IN lt_ekpo

       FOR ls_ekko IN lt_ekko从line_index(lt_ekko [ebeln = ls_ekpo-ebeln])

       在哪里(ebeln = ls_ekpo-ebeln)

       FOR ls_makt IN lt_makt从line_index(lt_makt [matnr = ls_ekpo-matnr])

       在哪里(matnr = ls_ekpo-matnr)

       FOR ls_t001w IN lt_t001w从line_index(lt_t001w [werks = ls_ekpo-werks])

       在哪里(werks = ls_ekpo-werks)

       LET ls_final = VALUE ty_final(

       lifnr = ls_ekko-lifnr

       maktx = ls_makt-maktx

       name1 = ls_t001w-name1)

       IN(对应#(BASE(ls_final)ls_ekpo)))。

 

将其与传统的并行游标方法进行比较时,在读取与键匹配的行的表格后进入ITAB2的循环时,我们将检查键,如果不匹配则退出循环。 但是在上面的共享代码中,我们正在使用匹配键扫描循环中的所有记录。 如果不匹配,是否可以像退出循环那样受到限制?这会产生什么影响?

4条回答
路亽曱_Ryan
2020-08-21 20:04

Quynh Doan Manh 实际上,它不再是"并行游标",因为您在每个循环中都进行了二进制搜索,因此性能要慢得多。 为了验证这一点,我在您的解决方案下进行了转换,使其适合我之前发布的完整可验证示例,以便可以进行比较(我得到了x4的差)。

NB:您的代码向左 通过UNTIL进行外部联接,您可以改为使用WHILE将其更改为内部联接。

方法parallel_cursor_with_for_until FOR TESTING。
     方法parallel_cursor_with_for_while进行测试。

   方法parallel_cursor_with_for_until。
     做100次。
       DATA(lt_final)= VALUE ty_t_final(
             FOR Scarr_s中的
             FOR i = line_index(spfli_s [carrid =  -carrid])
                 直到i = 0"左外联接
                    或者我>线(spfli_s)
                    或spfli_s [i] -carrid <>  -carrid
             (carrid = <疤痕> -carrid
               carrname = <疤痕> -carrname
               connid = VALUE#(spfli_s [i] -connid可选)
               cityfrom = VALUE#(spfli_s [i] -cityfrom OPTIONAL)))。
     ENDDO。
   终结法。
   方法parallel_cursor_with_for_while。
     做100次。
       DATA(lt_final)= VALUE ty_t_final(
             FOR Scarr_s中的
             FOR i = line_index(spfli_s [carrid =  -carrid])
                 当我<> 0"内联接时
                   AND i <=行(spfli_s)
                   AND spfli_s [i] -carrid =  -carrid
             (carrid = <疤痕> -carrid
               carrname = <疤痕> -carrname
               connid = spfli_s [i] -connid
               cityfrom = spfli_s [i] -cityfrom))。
     ENDDO。
   ENDMETHOD。

一周热门 更多>