안녕하세요 오늘은 MOVE-CORRESPONDING에 대해 알아보겠습니다.
MOVE-CORRESPONDING은 컬럼명이 같다면 그 필드가 가진 데이터를 그대로 옮겨주는 구문입니다.
예를 하나 들어보겠습니다.
구조체 1 값을 구조체 2로 복사를 해보겠습니다.
구조체 1과 구조체 2의 컬럼과 데이터를 한번 확인해보겠습니다.
(구조체 1)
구조체 1의 컬럼명은 각각 사번, 사원이름이며 각 컬럼의 데이터는 'S1234', '아밥기초'가 들어있습니다.
사번 | 사원이름 |
S1234 | 아밥기초 |
(구조체 2)
구조체 2의 컬럼명은 각각 사원번호, 사원이름이며 구조체 1의 값을 MOVE-CORRESPONDING구문으로 받아 올
예정입니다.
사원번호 | 사원이름 |
(코딩)
MOVE-CORRESPONDING 구조체 1 TO 구조체 2.
(결과 - 구조체 2)
사원번호 | 사원이름 |
아밥기초 |
구조체 1의 데이터를 구조체 2로 MOVE-CORRESPONDING을 통해 데이터를 넘겨줘보니,
(사원번호)는 들어와있지 않고 (사원이름) 컬럼의 데이터만 들어와있습니다.
왜그럴까요??
구조체1의 '사번'이라는 컬럼명과 구조체2의 '사원번호'라는 컬럼명이 서로 일치하지 않기 때문에
값 복사가 안되었던 것입니다.
구조체 1과 2의 사원번호의 값을 MOVE-CORRESPONDING을 통해 서로 복사 가능한 상태로 만들려면,
구조체 1의 컬럼명을 구조체 2에 맞게 '사원번호'로 변경하던지 아니면
구조체 2의 컬럼명을 구조체 1에 맞게 '사번'으로 변경해야 합니다.
(소스예제)
(소스 해석)
1. 스트럭처 간 MOVE-CORRESPONDING
ECC 버전 즉, 뉴 신택스 구문이 되지 않는 아밥 버전이라면 MOVE-CORRESPONDING이라는 구문은
(구조체 TO 구조체) 밖에 되지 않습니다. (STRUCTURE TO STRUCTURE)
따라서 주로 LOOP를 돌면서 구조체에 담아주는 로직에 많이 사용합니다.
위 로직을 풀어보겠습니다.
1번 로직의 예시는 LOOP를 돌며 LT_SFLIGHT의 라인 1개의 값을 LS_SFLIGHT 구조체(스트럭처)에
담아주고, 그 데이터를 LS_SFLIGHT2, LS_SFLIGHT3에 값을 복사하는 테스트입니다.
(LS_SFLIGHT 구조체)
(LS_SFLIGHT2 구조체)
MOVE-CORRESPONDING LS_SFLIGHT TO LS_SFLIGHT2 구문은 값이 정상적으로 잘 복사가 되었습니다.
왜그럴까요?
MANDT부터 SEARSOCC_F 컬럼명 까지 전부 동일하기 때문에 컬럼명에 맞는 데이터를 전부 정상적으로 가져왔습니다.
그럼 MOVE-CORRESPONDING LS_SFLIGHT TO LS_SFLIGHT3 구문도 확인해볼까요?
(LS_SFLIGHT3 구조체)
결론적으로 LS_SFLIGHT3 구조체의 CARRID3, CONNID3 컬럼에 아무런 값이 복사되지 않았습니다.
LS_SFLIGHT 구조체의 컬럼명에 CARRID3, CONNID3이 없어 LS_SFLIGHT3 구조체에 가져올 값이 없어
못 가져오게 된 것입니다.
즉, 두 구조체 서로 컬럼명이 같은 값만 복사됩니다.
2. 테이블 간 MOVE-CORRESPONDING
테이블간 값 복사는 MOVE-CORRESPONDING이 아닌 MOVE문을 사용하시면 테이블 컬럼명이
같은 데이터끼리 값 복사가 됩니다.
위 예제코드로 실습해보세요.
감사합니다.
'- SAP ABAP 기초부터 시작하기' 카테고리의 다른 글
SAP ABAP 기초 4-6) MODIFY 구문 이해하기 (인터널 테이블) (0) | 2022.12.12 |
---|---|
SAP ABAP 기초 4-5) APPEND 구문 이해하기 (0) | 2022.12.09 |
SAP ABAP 기초 4-3 ) 데이터 가공 3 - FOR ALL ENTRIES IN (0) | 2022.12.05 |
SAP ABAP 기초 4-2 ) 데이터 가공 2 - READ TABLE에 대한 이해 (0) | 2022.12.02 |
SAP ABAP 기초 4-1 ) 데이터 가공 1 - LOOP에 대한 이해 (0) | 2022.11.30 |