SAP ABAP - 使用控制表进行处理

时间:2013-03-01 13:22:08

标签: sap abap

我的问题:

我将表“循环”到名为ls_eban的本地结构中。

有了这些信息,我必须遵循这些说明:

  1. ls_eban-matnr 必须在zmd_scmi_st01中(1.控制表(全局))
  2. ls_eban-werks 必须在zmd_scmi_st05中(2.控制表(全局))
  3. ls_eban-knttp 必须在zmd_scmi_st06中(3.控制表(全局))
  4. 我需要一个清晰且高效的选择。我实际上有一个,但它根本不具备高性能。

    我的解决方案:

    SELECT st01~matnr st05~werks st06~knttp
      FROM       zmd_scmi_st01 AS st01
      INNER JOIN zmd_scmi_st05 AS st05
      ON         st05~werks = ls_eban-werks
      INNER JOIN zmd_scmi_st06 AS st06
      ON         knttp = ls_eban-knttp
    INTO TABLE   lt_control
    WHERE        st01~matnr = ls_eban-matnr AND st01~bedarf = 'X'
      AND        st05~bedarf = 'X'.
    

    我还必须说,控制表之间没有任何关系(没有主键,也没有辅助键)。

1 个答案:

答案 0 :(得分:0)

你不应该做的第一件事是在循环中选择。而不是

loop at lt_eban into ls_eban.
      Select ....
endloop.

你应该做一次选择。

if lt_eban[] is not initial.
   select ...
     into table ...
     from ...
      for all entries in lt_eban
    where ...
endif.

如果我们有更多的信息(如vwegert的评论中提到的那样,可能会有更多的低效率需要纠正。例如,控制表上真的没有键吗?)但是循环中的select是第一个跳出来的东西在我身边。