SAP ABAP 개발을 할 때, 인터널 테이블에 추가로 레코드를 입력하고 싶을 때, 어떤기능을
사용할까?
아마도, INSERT구문 또는 APPEND를 사용한다는 것을 알고 계실듯합니다.
실무에서INSERT냐, APPEND냐에 대해 고민한다면, "인터널테이블"이 INDEX TABLE형태로 선언이 되었는가, 아니면 NON INDEX TABLE인가에 따라 달라질 것으로 보입니다.
=> 무슨말일까
" INSERT GS_DATA INTO GT_DATA
GT_DATA = VALUE #( ( 'A' ) ( 'B' ) ).
GS_DATA = 'C'.
INSERT GS_DATA INTO GT_DATA.
" 결과: GT_DATA = ( 'A' 'B' 'C' )
" INSERT GS_DATA INTO GT_DATA INDEX 1 OR N
GT_DATA = VALUE #( ( 'A' ) ( 'B' ) ).
GS_DATA = 'C'.
INSERT GS_DATA INTO GT_DATA INDEX 1.
" 결과: GT_DATA = ( 'C' 'A' 'B' )
INDEX는 내부 테이블의 "삽입 위치"를 지정하는 역할을 함
INDEX 1 → 제일 앞에 삽입 / INDEX n → n번째 위치에 삽입
INSERT 사용시 주의점
1. DB저장. Single line
-> DB테이블과 인터널 테이블의 FIELD 구조는 동일해야함
INSERT SFLIGHT FROM GS_LIST . COMMIT WORK.
2. DB에 값을 저장시, 중복키 값이 발생하면 덤프
INSERT SFLIGHT FROM TABLE GT_LIST.
3. DB저장. MULTI LINE
-> INSERT시, KEY가 중복된 필드는 삽입하지 않고, 중복없는 KEY데이터만 삽입한다.
INSERT SFLIGHT FROM TABLE GT_LIST ACCEPTING DUPLICATE KEYS. COMMIT WORK.
중복키 값이존재할 경우 SY-SUBRC가 4로 발생한다는 특징을 갖고 있음.
DB테이블에 입력할때는 DB테이블에 명시된 KEY필드를 기준으로 인터널 테이블의 데이터를 중복체크할 것이다.
APPEND
1. 1건 삽입 할 때. APPEND <STRUCTURE> TO <INTERNAL TABLE>
GS_LIST-MANDT = SY-MANDT
GS_LIST-CARRID = 'Z123'
GS_LIST-CARRNAME = '에어프레미아'
GS_LIST-CURRCODE = 'EUR'
GS_LIST-URL = 'BLOG.NAVER.COM'
APPEND GS_LIST TO GT_LIST.
2. N건을 삽입할 떄.
APPEND LINES OF <인터널테이블1> FROM 1 TO 2 TO <인터널테이블2>
* 인터널 테이블 1~2행만 삽입.
APPEND LINES OF GT_LIST FROM 1 TO 2 TO GT_TAB.
INSERT, APPEND를 볼 때, ALV레포트 프로그램 개발 할때, 특히 DEEP STRUCTURE로 CELLTAB를 구성할 떄는 보통 INSERT를 사용하여 필드의 수정여부를 제어함.