ABAP 신문법(New Syntax)인 Value구문에 대한 설명이다.
Value문은 Insert/Append와 유사한 기능을 한다. Internal Table 또는 Structure에 초기 데이터를 생성하거나 데이터를 추가할 수 있는 기능을 가지고 있다.
지금까지는 workarea를 통해서 Internal Table과 Structure에 행을 삽입하였을 것이다. 하지만 Value문은 workarea가 필요하지 않다.
workarea를 꼭 써야 Internal Table에 Insert가 가능하다는 패러다임을 바꿔 줄 구문이다.
● Structure에 데이터 할당
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
*Structure 선언
DATA: ls_old TYPE l_type.
*값할당
ls_old-field1 = '첫번째 필드'.
ls_old-field2 = '두번째 필드'.
ls_old-field3 = '세번째 필드'.
ls_old-field4 = '네번째 필드'.
ls_old-field5 = '다섯번째 필드'.
(구 문법)
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
*Structure 선언
DATA: ls_new TYPE l_type.
*값 할당
ls_new = VALUE #( field1 = '첫번째 필드' field2 = '두번째 필드'
field3 = '세번째 필드' field4 = '네번째 필드'
field5 = '다섯번째 필드'
).
(Value 문법)
위 두 코드는 동일한 기능을 하는 코드이다.
이런 식으로 Structure에 값을 할당할 때 Value문을 사용하면 한 줄로 (Structure형태 그대로) 값을 지정할 수 있다.
말했다시피 위 구문은 Structure ls_new에 대하여 값을 할당(초기값을 설정)하겠다는 뜻이다.
#은 operand type(피 연산자 type)이다. 여기서 피 연산자란 ls_new를 가리키고 있다. 정리하자면
'Structure ls_new에 'l_type'이라는 type(ls_new의 type)으로 데이터를 설정/추가하겠다'라는 뜻으로 해석할 수 있다.
정리하자면 아래의 구문과 동일하다.
◆ #자리에 Type이 아닌 Structure이나 Internal Table을 삽입 시 다음과 같은 에러가 발생한다.
● Table에 데이터 할당
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
DATA: ls_old TYPE l_type,
lt_old TYPE TABLE OF l_type.
ls_old-field1 = '첫번째 필드'.
ls_old-field2 = '두번째 필드'.
ls_old-field3 = '세번째 필드'.
ls_old-field4 = '네번째 필드'.
ls_old-field5 = '다섯번째 필드'.
INSERT ls_old INTO TABLE lt_old.
CLEAR ls_old.
ls_old-field1 = '여섯번째 필드'.
ls_old-field2 = '일곱번째 필드'.
ls_old-field3 = '여덞번째 필드'.
ls_old-field4 = '아홉번째 필드'.
ls_old-field5 = '열번째 필드'.
INSERT ls_old INTO TABLE lt_old.
(구 문법)
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
DATA lt_new TYPE TABLE OF l_type.
lt_new = VALUE #(
( field1 = '첫번째 필드' field2 = '두번째 필드' field3 = '세번째 필드'
field4 = '네번째 필드' field5 = '다섯번째 필드'
)
( field1 = '여섯번째 필드' field2 = '일곱번째 필드' field3 = '여덞번째 필드'
field4 = '아홉번째 필드' field5 = '열번째 필드' )
field1 = '고정값'
( field2 = '필드값' field3 = '필드값' field4 = '필드값' field5 = '필드값' )
( field2 = '필드값2' field3 = '필드값2' field4 = '필드값2' field5 = '필드값2' )
).
(Value 문법)
데이터는 괄호 한 묶음씩 추가가 된다. 즉 여섯 개의 데이터(행)가 있는 테이블이다.
밑에서 네 번째 줄에 field1 = '고정값'구문은 괄호에서 빠져있다.
괄호 밖에 명시되고 있는 필드는 필드 아래의 행들에 대하여 모두 추가가 된다.(Default와 유사)
해당 Value문을 디버깅해보면 다음과 같은 테이블이 만들어진다.
코드가 훨씬 줄어들고, 가독성도 많이 좋아졌다. insert를 위한 structure는 생성조차 하지 않았다. 확실히 코딩 효율도 올라갈 것이라고 생각한다.
● Inline선언 활용
앞서 배운 Inline선언을 활용하면 Structure/Table 선언과 동시에 데이터 초기화가 가능하다.
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
DATA(ls_new) = VALUE l_type( field1 = '첫번째 필드' field2 = '두번째 필드'
field3 = '세번째 필드' field4 = '네번째 필드'
field5 = '다섯번째 필드'
) .
(Structure Inline 선언)
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
*Table type 선언
TYPES l_t_type TYPE TABLE OF l_type WITH NON-UNIQUE KEY field1.
DATA(lt_new) = VALUE l_t_type(
( field1 = '첫번째 필드' field2 = '두번째 필드' field3 = '세번째 필드'
field4 = '네번째 필드' field5 = '다섯번째 필드'
)
( field1 = '여섯번째 필드' field2 = '일곱번째 필드' field3 = '여덞번째 필드'
field4 = '아홉번째 필드' field5 = '열번째 필드' )
field1 = '고정값'
( field2 = '필드값' field3 = '필드값' field4 = '필드값' field5 = '필드값' )
( field2 = '필드값2' field3 = '필드값2' field4 = '필드값2' field5 = '필드값2' )
).
(Internal Table Inline 선언)
ABAP New Syntax - Inline 선언
안녕하세요 쿄신입니다. ABAP의 신문법(New Syntax)인 Inline선언에 대한 설명입니다. Inline선언이란 미리 data(Field Symbol)를 선언하지 않고 line에서 선언하는 문법입니다. 담고자 하는 값의 유형에 따라 da..
kyoshins.tistory.com
● Base문
*type 선언
TYPES: BEGIN OF l_type,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
field4 TYPE char10,
field5 TYPE char10,
END OF l_type.
*Table type 선언
TYPES l_t_type TYPE TABLE OF l_type WITH NON-UNIQUE KEY field1.
DATA(lt_new) = VALUE l_t_type(
( field1 = '첫번째 필드' field2 = '두번째 필드' field3 = '세번째 필드'
field4 = '네번째 필드' field5 = '다섯번째 필드'
)
( field1 = '여섯번째 필드' field2 = '일곱번째 필드' field3 = '여덞번째 필드'
field4 = '아홉번째 필드' field5 = '열번째 필드' )
field1 = '고정값'
( field2 = '필드값' field3 = '필드값' field4 = '필드값' field5 = '필드값' )
( field2 = '필드값2' field3 = '필드값2' field4 = '필드값2' field5 = '필드값2' )
).
lt_new = VALUE #( BASE lt_new
( field1 = '추가 필드' field2 = '추가 필드' field3 = '추가 필드'
field4 = '추가 필드' field5 = '추가 필드')
).
두 번째 Value문에 Base를 사용하고 있다.
Value에 Base를 쓸 경우 Base 뒤에 나오는 인터널 테이블의 값(현재 lt_new)을 가지고 추가로 Insert 된다.
위 구문은 4개의 행을 가지고 있는 lt_new 테이블를 base로 하나의 행이 추가되는 코드이다.
궁금한 사항들은 댓글을 남겨주시면 친절히 답변드리겠습니다.^^
'SAP > ABAP New Syntax' 카테고리의 다른 글
ABAP new syntax line_exists (0) | 2021.11.12 |
---|---|
Open SQL CASE문 사용법 (0) | 2021.09.29 |
ABAP New syntax - filter (0) | 2020.11.15 |
ABAP New syntax - switch, cond (0) | 2020.11.08 |
ABAP New Syntax - Inline 선언 (5) | 2020.03.24 |