안녕하세요.. LOOP 안에 LOOP을 처리하고 있습니다..
LOOP AT LT_MARM01.<-8만건
LV_CNT_EA = 0.
LOOP AT LT_MARM02 WHERE EAN11 = LT_MARM01-EAN11 <-8만건
AND MEINH = 'EA'.
LV_CNT_EA = LV_CNT_EA + 1.
ENDLOOP.
ENDLOOP.
이렇게 처리를 하는데.. LT_MARM01 테이블에는 8만건 LT_MARM02에도 8만건 정도 있습니다..
LT_MARM02를 빼면 1초만에 도는데 LOOP 을 추가하니 20분 넘게 도네요..
LOOP AT LT_MARM02 WHERE EAN11 = LT_MARM01-EAN11 조건 찾는 데이터는 2개 3개씩 정도 있고요.
유닛하게 하나면 READ TABLE로 할껀데 유닛하지 않으니. 문제가 되네요..
빠르게 할수있는 방법이 잇을까요 최후의 방법으로 평션하나 만들어서 패러럴로 처리하는방법이 있긴하지만
그건 최후 방법이고요.. SORT테이블 HASHED 테이블도 유닛한 값이 아니라서 안될것같고.. 모가 잇을가요?
댓글 8
-
ABAPCHOJJA
2011.03.25 19:39
index 테이블로 잡으시고 key 를 not-unique key 로 설정하시면 좀 나을 듯 싶네요. ^^ -
페르츠
2011.03.25 20:12
혹시나 해서 드리는 말씀인데 처음 데이터를 select할 때 LT_MARM01와 LT_MARM02를 하나의 인터널 테이블이 나올 수 있도록 join을 다시 고려해볼 여지는 없나요? 가능하다면 이게 가장 좋은 방법일 것 같은데....^^ -
글쎄다
2011.03.25 20:19
SORT LT_MARM01 BY EAN11.
SORT LT_MARM02 BY EAN11 MEINH.
LOOP AT LT_MARM01.
READ TABLE LT_MARM02 WITH KEY EAN11 = LT_MARM01-EAN11 BINAR~
IF SY-SUBRC = 0.
LOOP AT LT_MARM02 FROM SY-TABIX.
IF LT_MARM01-EAN11 = LT_MARM02-EAN11
AND LT_MARM02-NEINH = 'EA'
~
ELSE.
EXIT.
ENDLOOP.
ENDIF.
-
둥맘
2011.03.25 22:25
read table로 해보세용.
-
bd
2011.03.25 22:34
무엇때문에 Loop~Loop 하시는 지도 중요 합니다. 위에 글처럼 최초에 Select할때 처리 할수 있는 부분이라면 그 부분이 답이 되겠지요..
단순하게 특정 조건값으로 발생한 Count만 하실 생각이라면 Count처리 후 해당 라인에 값을
삭제해 주는것도 하나에 방법입니다. 만일 LT_MARM01에 존재 하는 값이 LT_MARM02에도
있는지 없는지 Check를 하시는 경우라면 더더욱 그렇고요..
-
ABAPCHOJJA
2011.03.26 01:38
제가 보기엔 marm 테이블에서 ean11을 키로 하는 ea 갯수가 몇개인지 count 하는 것 같은데요.
it_marm02 데이터를
select ean11 count( meins ) into table it_marm02
from marm where ~~ group by ean11. 로 가져오시고
it_marm02 테이블을 ean11 을 키로 하는 sorted table 로 만들어서 read 하시면 좋으실 것 같네요.
loop at it_marm01.
clear lv_cnt_ea .
read table it_marm02 with key ean11 = it_marm01-ean11.
check sy-subrc is initial.
lv_cnt_ea = it_marm02-count.
endloop.
이런식으로 하시면 퍼포먼스가 훨씬 좋아질 것 같네요.
-
lucky7.
2011.03.28 23:31
select 할때 해당 조건을 count 해서 가져온다는거 정말 좋은 생각이것같습니다. 근데 로직을 작성하는데 제대로 못가져오네요..
SELECT EAN11
MEINH COUNT(
DISTINCT
MEINH )
FROM MARM
INTO CORRESPONDING FIELDS OF TABLE LT_TMP
WHERE MATNR IN S_MATNR
AND MEINH IN ('EA', 'BOX')
GROUP BY EAN11 MEINH.
단위별로 몇개가 있는지 알고 싶은데 이렇게 하니깐 conut 에 0 나옵니다. 정확한 로직좀 부탁드립니다.
-
lucky7.
2011.03.28 23:52
SELECT EAN11
MEINH COUNT(
DISTINCT
MEINH ) AS COUNT
FROM MARM
INTO CORRESPONDING FIELDS OF TABLE LT_TMP
WHERE MATNR IN S_MATNR
AND MEINH IN ('EA', 'BOX')
GROUP BY EAN11 MEINH.
요로구럼 하니깐 해결되네요. 감사합니다