LOOP AT ITAB00.
gv_count = 0.
DO 31 TIMES.
gv_count = gv_count + 1.
Z_DATE = gv_count.
CONCATENATE 'ITAB02-FIELD' Z_DATE INTO Z_DATE1.
SELECT SINGLE LMNGA
INTO (ITAB00-LMNGA)
FROM AFRU
WHERE BUDAT = Z_DATE1.
MODIFY ITAB00.
ENDDO.
ENDLOOP.
위와 같이 하면 데이터는 읽히는데 속도가 너무 오래 걸립니다.
read table를 써서 데이터를 빠르게 하는 방법이 없을까요?
초보라 개념이 잡히지 않아서 고수님들의 답변 부탁드립니다.
댓글 5
-
SSong
2007.11.27 06:06
-
지의
2007.11.27 17:06
Loop 안에 Do 가 있는데 저렇게 돌리면 Loop 에 10건의 데이타가 있다면 Select 를 310번 돌겠네요.
날짜를 From ~ To 로 해서 Do 문을 없애시고 Select 를 Loop 밖으로 빼서 하시고
Read 문을 사용하면 한결 빨라진 것을 느낄 수 있습니다.
수고하세요.
-
hongman
2007.11.27 18:06
DO문에서 31일까지 돌면서 가져오는 데이터를 계속 ITAB00-LMNGA에 넣고 있는데...
다른 날짜의 데이터를 가져와서 같은 곳에 계속 modify하고 있네요.
결국 31일자의 데이터만 남게되는 경우인듯합니다.
ITAB00에 데이터를 가져오는 소스를 좀 올려주시면 같이 가져올 수 있는 방법을 모색해 볼 수가 있을듯 한데요.
소스를 좀 더 올려주시면 답을 찾는데 도움이 될듯 합니다.
-
윤군친구(bsp개발자)
2007.11.27 20:22
홍맨님이 말씀하신것처럼 일단은 source가 오류인것같네요.. 31일짜의 data만 가저오고있네요..
즉 1~30 일 에선 그냥 시간만 잡고있다는거네요..
일단 로직을 먼저 수정하셔야할듯.
-
최창환
2007.11.28 04:49
감사합니다.
LOOP 문안에 SELECT 를 사용하면 속도가 굉장히 오래 걸립니다 .
AFRU 를 인터널 테이블로 만들고 READ TABLE 를 사용하시면
확실히 속도 차이를 느낄수 있을껍니다 . 추가로 SELECT ~ ENDSELECT 이런 문법들은
사용안하시는게 좋습니다 .