안녕하세요
완전 초보라서 계속 헤매다가 이곳에 질문 한번 드려 봅니다.
일단 소스에
LOOP AT T_LIST1.
READ TABLE C_LIST1 FROM T_LIST1 COMPARING ALL FIELDS.
IF SY-SUBRC = 2.
APPEND T_LIST1 TO R_LIST1.
ELSE.
ENDIF.
ENDLOOP.
이런식으로 넣었습니다.
T_LIST1, C_LIST1 모두 동일한 형태를 가진 테이블의 Itab 이구요.
이런식으로 하면 T_LIST1과 C_LIST1의 모든 필드를 한행씩 내려가면서 비교해서 리턴값을 주는게 아닌가요?
현재 T_LIST1, C_LIST1은 완전히 동일한 필드형태, 필드 내부 데이터값을 갖고 있습니다.
전체적인 이부분 소스의 의도는 두 테이블을 비교해서 달라진 값이 있을 경우 그 데이터만 골라내는건데요.
필드가 완전히 동일한 경우 READ TABLE .... COMPARING을 썼을때,
SY-SUBRC 리턴값이 0으로 나오고 다른값이 있을 경우 SY-SUBRC 리턴값이 2가 나오는걸로 알았는데요.
현재는 루프 돌면서 값을 비교할때 SY-SUBRC 리턴값이 계속 2가 나옵니다.
이거 무슨 문제일까요?
소스의 의도를 구현할 수 있으려면 어떻게 해야 할까요?
급한거라 도움좀 꼭 부탁드리겠습니다. 감사합니다.
좋은 하루 보내세요 ^^
댓글 8
-
페리
2010.02.09 17:12
-
elie
2010.02.09 18:10
답변 감사합니다. 저도 다시 테스트를 해봐야겠네요.
그런데 이상한건 분명히 SY-SUBRC 리턴값이 4로 나오는건 엔트리와 필드가 전부 일치하지 않을때라고 되어있는데..
어떻게 된걸까요;;;
-
페리
2010.02.09 18:25
엔트리와 필드가 전부 일치하지 않을때가 아니라
해당 조건에 만족하지 않는 데이타라면 리턴값이 4로 될꺼에요..
ALL FIELDS. 는 모든 필드를 비교한다는건데..
모두 동일한 값이 있으면 2. 하나라도 동일하지 않는게 있다면 4로 되겠지요..
-
elie
2010.02.09 18:42
아 그렇군요.. 설명 감사드립니다.
그럼 이런 상황에서 리턴값이 0이 나오는 케이스는 어떤 상황이 될까요? 완전 일치일때 0이 된다라고 되어 있더라구요;;
-
페리
2010.02.09 19:09
2
Like sy-subrc equals 0. Differentiates cases that use the addition COMPARING in result.
COMPARING 으로 비교한다면 SY-SUBRC EQ 0 과 같은 거에요.
예를들면
READ TABLE ITAB WITH KEY MATNR = '1'.
위의 구문이 만족한다면 SY-SUBRC 는 0으로, 만족하지 않는다면 4로 떨어지죠.
READ TABLE ITAB FROM WA_ITAB COMPARING ALL FIELDS.
만족하면 2 ( 위의 SY-SUBRC 0과 같음) 만족하지 않는다면 4.
-
테라스
2010.02.09 20:40
이부분을
READ TABLE C_LIST1 FROM T_LIST1 COMPARING ALL FIELDS.
아래와 같이 바꾼다면
READ TABLE C_LIST1 INTO T_LIST1 FROM T_LIST1 COMPARING ALL FIELDS.
SY-SUBRC 가 0으로 나올꺼에요
-
Happy~
2010.02.09 22:14
다른말이긴 하지만서도 프로그램은 다음분을 위해서라도 제발 범용적이고 평이하게 짜주세요.다음분이 저 프로그램을 유지보수해야할일이 있다면 얼마나 갑갑하시겠어요.^^*
-
elie
2010.02.09 22:27
테라스님 페리님 좋은 답변 정말 감사드립니다.
워낙 초보라서 아무것도 모르는 상태에서 맨땅에 헤딩을 하다보니 소스가 좀 그렇죠? ^^;
주석을 열심히 잘 달도록 하겠습니다;
두 테이블을 비교해서 변화된 데이터만 뽑아올 수 있는 좀 더 범용적이고 평이한 소스는 어떤 형태가 또 있을까요? 부탁드리겠습니다.
게시판을 통해 정말 많이 배우고 있습니다. 감사합니다.
테스트를 해보니깐..
동일한 값이 있을 경우 SY-SUBRC = '2'
동일한 값이 없을 경우 SY-SUBRC = '4' 로 리턴되네요.