안녕하세요! 오늘은 Table Index를 수월하게 관리할 수 있는 Secondary Key에 대해 포스팅하겠습니다!
Secondary Key
Secondary Key는 쉽게 설명하면 Internal table 의 두번째 Key입니다.
메인키인 Primary Key가 아닌 Sort 용 Key로 Table의 Index를 수월하게 관리할 수 있는 역할을 하고있습니다.
Secondary Key는 많은 레코드를 가진 Table에 사용하며, 인덱스의 변화를 주는 구문에서 사용하면 안됩니다.
1. Secondary Key 선언

Secondary Key는 위 코드 와 같이 사용할 수 있으며, Sorted key 구문을 이용하여 선언할 수 있습니다.
예시에서는 lt_keytest 테이블에 carrid 필드를 Key로 가진 Key_1 이라는 Secondary Key와 carrname 필드를 Key 를 가진 Key_2 라는 Secondary Key 총 두개의 Key를 선언해주었습니다.
2. Secondary Key 사용
예시를 통해 Secondary Key를 사용하는 것을 확인 해보겠습니다.

먼저 Carrid 와 Carrname에 불규칙적인 데이터를 가진 테이블을 만들었습니다.

불규칙적인 레코드 가진 table을 Secondary Key를 활용하여 Loop 를 돌려보겠습니다.
* Using Key 구문에 선언한 Sorted Key 를 적으면 해당 Key를 기준으로 Table이 정렬됩니다.

해당 구문 실행 결과, Key_1을 사용한 첫번째 loop는 Carrid 를 기준으로 정렬됐고, Key_2를 사용한 두번째 Loop는 Carrname을 기준으로 정렬이 된것을 확인할 수 있습니다.
이처럼 Secondary Key를 사용한다면, Sort구문 없이 Internal table을 관리 할 수 있습니다.

이때, Debugigng 을 해보면 인터널 테이블의 레코드의 순서는 처음과 바뀌지 않은 것을 확인 할 수 있습니다.
즉 Secondary Key를 사용한 구문에서만 Index가 바뀌며, Internal Table 자체의 Index에는 영향을 끼치지 않는 것을 확인 할 수 있습니다.
3. Secondary Key 활용

Carrid 가 'A02' 인 데이터의 이름을 A_항공사로 바꾸는 로직을 해보겠습니다.
먼저, 불규칙적인 데이터를 가진 인터널 테이블에 타겟 필드를 읽어 타겟 필드의 Index를 저장합니다.
lt_keytest에 'A02' 는 4번째에 존재하지만 carrid 로 정렬된 Key_1을 통해 읽으면 3번째에 존재하므로, lv_tabix 의 값은 3이 됩니다.
그렇게 lv_keytest의 3번째 index부터 Loop 를 돌며 타겟을 벗어나면 Loop가 끝나게 됩니다.

해당 코드의 결과는 다음과 같으며, 타겟 필드의 값인 'A02' 인 데이터만 Loop 를 진행하며, '나_항공사'에서 'A_항공사'로 바뀐 것을 확인 할 수 있습니다.
추가적으로 Loop 를 사용하실때 Where 를 사용하게되면, Loop 안에 구문은 안타겠지만, Table을 풀 스캔하기때문에 대용량 Table을 이용할때는 Secondary key를 활용해 보시는 것을 추천합니다.
또한 Abap New Syntax인 FILTER 구문을 사용하기 위해서는 KEY가 꼭 필요하니, Secondary Key를 활용해서 로직을 사용해보시길 바랍니다.
즐밥!
'SAP > ABAP' 카테고리의 다른 글
SAP 어플리케이션 툴바 버튼 제어 / Dynamic application toolbar button control (2) | 2024.08.28 |
---|---|
[SAP] 번역 Object CTS이관(관리영역 메뉴 번역 이관) (1) | 2024.04.18 |
SAP 첫 프로젝트 종류 후 쓰는 초보적인 실수들 (2) | 2024.02.14 |
ABAP Class에 대해 알아보자 #1 (0) | 2023.05.15 |
FIeld-Symbol로 간편하게 코딩하기 / Loop ~ Field-Symbol (0) | 2023.03.28 |