TYPES: BEGIN OF line,
col1 TYPE i,
col2 TYPE i,
col3 TYPE i,
END OF line.
DATA itab TYPE STANDARD TABLE OF
line WITH HEADER LINE.
DO 100 TIMES.
itab-col1 = sy-index.
itab-col2 = sy-index.
itab-col3 = sy-index.
INSERT TABLE itab.
ENDDO.
SORT itab BY col1 col2 col3.
READ TABLE itab WITH KEY col1 = 5000 col2 = 100 col3 = 999999.
WRITE: / itab-col1, itab-col2, itab-col3.
이렇게 하니 결과가 100 100 100 나오는데
어떻게 이런 결과가 나오는지 알수가 없네요?
read table 구문의 key값에 영향을 미치는것 같아보이는데 stardard 테이블로 선언되서 그럴 가능성도 있어 보이고..
그리고 read table의 key값은 뭘 의미하는가요? 위 소스상에서는
답변부탁합니다.
댓글 3
-
다급
2008.10.16 01:20
-
mean
2008.10.16 01:50
DO 100 TIMES.
itab-col1 = sy-index.
itab-col2 = sy-index.
itab-col3 = sy-index.
append itab.
ENDDO.
SORT itab.
READ TABLE itab WITH KEY col1 = 2 col2 = 2 col3 = 2.
IF SY-SUBRC = 0.
WRITE: / itab-col1, itab-col2, itab-col3.
ENDIF.
하시면, 2 2 2가 나올것입니다. if sy-subrc = 0 이떨어지면 read table이 정상으로 읽힌것입니다.
-
멍ㄱㅔ
2008.10.16 19:58
key값에 만족하는 값이 없네요 (col1 = 5000 col2 = 100 col3 = 999999. 이런 값은 없습니다.)
따라서 맨위에 header line 의 값이 출력되는거네여
header clear 시켜 주시고여 모두 1부터 100까지 똑같은 값이 들어가 있기 때문에
col1 ,col2 ,col3 조건을 똑같이 주어야 값이 나오겠네여 ^^
저도 초보라..
itab을 100번을 돌려서 실행하셨으면 값이 1~100까지만 들어가 있을텐데..
with key는 where 과 같은 의미입니다. itab에서 값을 읽어올때 어떤조건의 값을 읽어올건지
조건을 지정해 주는 것이지요.
헌데 위에서 지정하신 조건은 아예 존재하지 않으니
subrc가 4가 떨어질겁니다.
허니 write되어 나오는 100의 값은 do를 돌며 itab에 제일 마지막으로 들어간 100값이
아직 헤더에 올라와 있어서 그게 그대로 출력 된 것입니다.
read table 후에는 subrc 체크하셔야 합니다.