‎2007 Dec 05 6:01 AM
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
‎2007 Dec 05 10:34 AM
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.
‎2007 Dec 05 9:12 AM
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
‎2007 Dec 05 10:12 AM
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
‎2007 Dec 05 10:34 AM
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.
‎2007 Dec 05 12:23 PM