안녕하세요, abap 초보입니다 ㅠ
data(LT_TAB) = LT_DATA[].
라는 구문이 있을 때, LT_DATA[]에서 회사코드가 S123인 데이터만 LT_TAB으로 넣어주는 방법이 있을까요??
아니면 그냥 LT_DATA를 loop 돌리면서 넣어주는 수 밖에 없을까요?
고수님들의 조언 부탁 드립니다!
댓글 4
-
clearb
2021.09.01 05:50
-
Hwable
2021.09.01 20:07
위에 댓글 달아주신 방법을 쓰시거나,
SELECT A~*
FROM @LT_DATA AS A
WHERE A~BUKRS = 'S123'
INTO TABLE @DATA(LT_TAB).이렇게 쓰셔도 됩니다.
-
애불래
2021.09.01 20:44
좋은 방법인데 인터널테이블 LT_DATA의 BUKRS 필드가 Secondary index key(sorted, hashed)로 존재하지 않으면 인터널테이블 search 시 순차검색으로 속도 이슈가 있을 수 있습니다.
New syntax에 아래와 같은 문법도 있으니 참고하세요. 역시 인터널테이블에 key를 검색조건에 맞게 잘 지정해야 속도 이슈가 안 생깁니다.
CORRESPONDING dtype|#( itab FROM lookup_tab
USING [KEY key_name] s1 = t1 s2 = t2 ...예제 링크: Component operator, lookup table - ABAP Keyword Documentation (sap.com)
-
Hwable
2021.09.01 22:38
말씀하시는 바가 맞습니다.
대신 LT_DATA도 index key 가 설정되어있는 인터널테이블로 선언해서 써야겠죠.
더불어, New Syntax 에 VALUE #(FOR IN ) 문법으로도 질문자가 원하는 로직도 구현가능합니다.
여러 방법이 있겠지만 가장 간단한건 LT_DATA를 복제한 LT_TAB에서 BUKRS <> S123인건 삭제하면 되겠네요.