Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

performance tuning

Former Member
0 Likes
552

how do i rewrite the following using "for all entries" to improve performance?

DATA: BEGIN OF I_MARA OCCURS 0,

MATNR LIKE MARA-MATNR,

MTART LIKE MARA-MTART,

END OF I_MARA.

DATA : BEGIN OF I_SER01 OCCURS 0,

LIEF_NR LIKE SER01-LIEF_NR,

OBKNR LIKE SER01-OBKNR,

POSNR LIKE SER01-POSNR,

BWART LIKE SER01-BWART,

END OF I_SER01.

DATA : BEGIN OF I_OBJK OCCURS 0,

OBKNR LIKE OBJK-OBKNR,

SERNR LIKE OBJK-SERNR,

MATNR LIKE OBJK-MATNR,

END OF I_OBJK.

loop at i_ser01.

SELECT bobknr amatnr b~sernr FROM mara AS a INNER JOIN

objk AS b ON bmatnr = amatnr INTO TABLE i_objk FOR ALL ENTRIES IN i_ser01

WHERE b~obknr = i_ser01-obknr

AND b~sernr IN sernr

AND a~mtart = 'FERT'

AND a~matnr IN matnr.

endloop

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
518

You can use the below code instead of INNER JOIN.

SELECT obknr

sernr

matnr

INTO t_objk

FROM objk

FOR ALL ENTRIES IN i_ser01

WHERE obknr = i_ser01-obknr

AND sernr IN sernr

AND matnr IN matnr.

SELECT matnr

INTO t_mara

FROM mara

FOR ALL ENTRIES IN t_objk

WHERE matnr = t_objk-matnr

AND mtart = 'FERT' .

LOOP AT t_objk.

READ TABLE t_mara WITH KEY matnr = t_objk-matnr .

IF sy-subrc NE 0.

DELETE t_objk.

ENDIF .

ENDLOOP .

Reward Points to helpful answers.

Thanks.

4 REPLIES 4
Read only

Former Member
0 Likes
518

loop at i_ser01.

SELECT b~obknr a~matnr b~sernr 
             FROM mara AS a INNER JOIN objk AS b 
             ON b~matnr = a~matnr 
             INTO TABLE i_objk 
             FOR ALL ENTRIES IN i_ser01
             WHERE b~obknr = i_ser01-obknr
             AND b~sernr IN sernr
             AND a~mtart = 'FERT'
             AND a~matnr IN matnr.

endloop 

Please read the online help again, the FOR ALL ENTRIES does what a loop would do. You can skip the loop ... endloop! otherwise you have a loop in loop!

Siegfried

Read only

Former Member
0 Likes
518

hi

SELECT bobknr amatnr b~sernr

FROM mara AS a INNER JOIN objk AS b

ON bmatnr = amatnr

INTO TABLE i_objk

FOR ALL ENTRIES IN i_ser01

WHERE b~obknr = i_ser01-obknr

AND b~sernr IN sernr

AND a~mtart = 'FERT'

AND a~matnr IN matnr.

Thanks

Siva Kumar

Read only

Former Member
0 Likes
519

You can use the below code instead of INNER JOIN.

SELECT obknr

sernr

matnr

INTO t_objk

FROM objk

FOR ALL ENTRIES IN i_ser01

WHERE obknr = i_ser01-obknr

AND sernr IN sernr

AND matnr IN matnr.

SELECT matnr

INTO t_mara

FROM mara

FOR ALL ENTRIES IN t_objk

WHERE matnr = t_objk-matnr

AND mtart = 'FERT' .

LOOP AT t_objk.

READ TABLE t_mara WITH KEY matnr = t_objk-matnr .

IF sy-subrc NE 0.

DELETE t_objk.

ENDIF .

ENDLOOP .

Reward Points to helpful answers.

Thanks.

Read only

Former Member
0 Likes
518

THANK U FOR UR VALUEBLE ANSWERS AND ALL R REWARDED.