질문하나만 드리고 싶습니다.
LOOP AT 테이블1.
ADD 1 TO
sy-tabix .
MOVE 테이블1 TO 테이블2.
APPEND 테이블2.
IF
sy-tabix = '1000'. "1000개까지만 테이블2에 넣는다.
CLEAR l_tabix.
LOOP AT 테이블2. "1000개인 테이블2를 1개씩 돌려서 퍼폼문을 실행한다.
PERFORM 퍼폼문.
ENDLOOP.
CLEAR 테이블1. REFRESH 테이블1.
ENDIF.
ENDLOOP.
이 구문의 nested loop을 해결하는 방법이 무엇인지 알려주세요~~
LOOP AT 테이블1.
ADD 1 TO
sy-tabix .
MOVE 테이블1 TO 테이블2.
APPEND 테이블2.
IF
sy-tabix = '1000'. "1000개까지만 테이블2에 넣는다.
CLEAR l_tabix.
read 테이블2
WITH KEY ~~
BINARY SEARCH .
IF SY-SUBRC = 0.
PERFORM 퍼폼문.
endif.
CLEAR 테이블1. REFRESH 테이블1.
ENDIF.
ENDLOOP.
이렇게 바꿀까 생각해 봤는데요
그러면 테이블2의 1000줄을 차례로 읽어서 퍼폼문을 실행해야하는 원래 의도와는 다르게
테이블2 한줄만 읽고 끝나는거 같아서요~~
좋은 조언 부탁드리구요~~
감사합니다.^^
댓글 10
-
안규
2009.11.16 22:42
음...오류 메세지가 nested loop? 인가요? -
숟가락맨
2009.11.16 22:54
저 퍼폼문이 어떤걸 수행하는진 몰겠는데..loop안에 loop문이 특별히 넣어줄 필요는 없을듯한데요...퍼폼문이..테이블2에 값을 변경해주는거면....append 테이블2 를 퍼폼문 수행한다음에 넣어주고 테이블1이 천라인 넘으면 loop 문을 빠져나가게 exit 이런거 시켜주면될듯한데요..
-
안규
2009.11.16 22:55
일단 첫번째 구문에는 오류가 없어 보이는데 퍼품문이 문제인가 모르겠네요;; -
bd
2009.11.16 23:08
테이블2에 담기는 Data자체가 제 가공 되는 Data가 아니라면 구지 Loop을 다시 한번 타야될 이유는
없을꺼 같은대요..질문자체가 쪼콤 이해가 안가는게...nested loop관련 에러 인건지...
아님 해결 방법론인지.... 쪼콤 모르겠내요 ^^
-
해보자보자
2009.11.17 00:08
답변 감사드립니다. 꾸벅 (__)
제가공 부분이 있어서 다시 넣는 거거든요... itab에 1000건씩 잘라서 반복해서 넣어야하는데요 .
그리고 튜닝하는 분한테 nested loop을해결하라는 말을 들어서요;;;
LOOP AT 테이블1.
ADD 1 TO
sy-tabix .
MOVE 테이블1 TO 테이블2.
APPEND 테이블2.
IF
sy-tabix = '1000'. "1000개까지만 테이블2에 넣는다.
CLEAR l_tabix.
read 테이블2
WITH KEY ~~
BINARY SEARCH .
IF SY-SUBRC = 0.
LOOP AT 테이블2.
PERFORM 퍼폼문.
ENDLOOP.
endif.
CLEAR 테이블1. REFRESH 테이블1.
ENDIF.
ENDLOOP.
이렇게 고쳤는데 맞는지는 모르겠습니다. ;;;
-
요요
2009.11.17 00:57
위 문장 튜닝은 일단 append 를 없애야 겠네요.
insert lines of 테이블1 from index1 to index2 into table 테이블 2 ( index1 은 테이블 1의 시작 레코드, index2 는 종료레코드)이구요.
테이블1의 line 수를 describe table 테이블1 lines total_line 으로 구하셔서 1000 단위로 몇번 수행할 것인지 계산한 후에
아래 로직처럼 일단 테이블 1에 대한 loop 수를 제한 할 수 있겠네요.
data index1 type i.
data index2 type i.
data total_lines type i.
data loopc type i.
data div type i.
data mod type i.
describe table 테이블1 lines total_lines.
loopc = total_lines divide div mod mod.
if mod > 0.
add 1 to loopc.
endif.
index1 = index2 = 1.
do loopc times.
index2 = index1 + 1000 - 1.
if index2 > total_lines.
index2 = total_lines.
endif.
insert lines of 테이블1 from index1 to index2 into table 테이블2.
loop at 테이블2.
perform 테이블2.
endloop.
index1 = index2 + 1
enddo.
이런식이면 아마도 테이블1에 대한 loop 는 빼실 수 있으실 거예요.
좋은 결과 있으시길 바랍니다.
(급히 댓글로 코딩하느라 오류가 있을 수 있습니다. ^^;)
-
MadMax
2009.11.17 17:49
의문?
1.table1 안의 record 1000 개씩 table2 에 넣는 이유 : 특별한것이 있는지 ??? 단순히 1000개씩 모아서 작업 하기 위한 것이라면
append LINES OF tab1 FROM 1 to 1000 to tab2
이러면 될것 같고,
2. Table1 을 1000 개씩 반복 처리 할려고 하면
do.
if table1[] is initial. exit. endif.
clear: table2[].
append lines of table1 from 1 to 1000 to table2.
loop at table2.
perform ....
endloop.
enddo.
이러면 될것 같은데.. 맞나 모르겠음.. tunning 을 위한 것이라면.. 이것만 해결해야 할 문제는 아닌듯 함.. 이상의문이었습니다. ^^
-
MadMax
2009.11.17 17:51
참 위 source 중 append lines of .. 하고 난후 table1 을 지워야 함
delete table1 from 1 to 1000.
ㅠㅠ;
-
냥군
2009.11.18 04:22
안규님.
loop 안에 loop 이 nested loop 입니다.
-
해보자보자
2009.11.18 20:47
답변 감사드려요^^ 많은 도움이 되었습니다.~~