VALUE #( )은 객체에 데이터를 담을 수 있는 방식중 하나다.
이 글에서 VALUE #( )의 기능과 활용방식에 대해 포스팅하도록 하겠다.
⛏️목차
- Structure Type
- Internal Table Type
- Type Set
- BASE
Structure Type
기본적으로 VALUE #( )표현식은 ABAP 변수에 데이터 값을 할당할때 사용하는 방식이다.
<structured_variable> = VALUE #( <comp1> = <val1>
<comp1> = <val1>
... = ... )
위의 형식으로 사용될 수 있다. <structured_variable> 은 구조체 형식의 데이터 변수가 들어간다.
그 후 VALUE #( )변수뒤 <comp1>은 구조체의 컬럼이 할당되며, <val1>에는 할당하는 값이 들어간다.
예제 코드
TYPES: BEGIN OF st_connection,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
carrname TYPE s_carrname,
END OF st_connection.
DATA: connection TYPE st_connection.
connection = VALUE #( carrid = 'AA'
connid = '0017'
carrname = ' My Airline'
).
해당 방식으로 데이터를 선언하고 VALUE #( )을 활용하여 connection변수에 값을 할당할 수 있는것이다.
(connection변수의 모든 컬럼을 작성할 필요는 없다. 활용할 변수만 작성가능)
파운드(#)기호는 ABAP런타임 환경에서 대상 변수(connection)과 동일한 유형의 구조를 구성하라는 지시어 이다.
해당 기호 이외에 다른 데이터 변수를 작성하면 해당 작성된 변수 구조로 데이터 구성이 변경된다.
Internal Table Type
internal Table Type에 활용할때는 구조가 조금 추가 된다.
<itab_variable> = VALUE #( ( <col1> = <val>
<col2> = <val> )
( <col1> = <val>
<col2> = <val> )
( ... )
).
위의 구조에서 <itab_variable>는 인터널 테이블 구조의 데이터 변수가 들어간다.
뒤의 VALUE #( ) 부분에서 차이가 발생하는데 파운드(#)기호 뒤에 괄호 에서 데이터 라인 한 개당 괄호 한쌍이 필요하다.
괄호와 값 괄호 사이에 공백이 필수로 필요하다. 또한 값 괄호와 값 사이에도 공백이 필요하다.
예제 코드
TYPES: BEGIN OF st_connection,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
carrname TYPE s_carrname,
END OF st_connection.
DATA: connection TYPE TABLE OF st_connection.
DATA(result) = VALUE #( ( carrid = 'AA'
connid = '0017'
carrname = 'My Airline' )
( carrid = 'LH'
connid = '0064'
carrname = 'Your Airline' )
( ... )
).
해당 예제처럼 인터널 테이블에 데이터를 할당할때에는 괄호를 사용해 값을 분리해준다.
이를 활용하면 구조체를 활용하여 append 할필요 없이 인터널 테이블에 데이터를 할당 할 수 있다.
Type Set
# 기호를 대신해 타입값을 명시적으로 지정할 수 있다.
DATA(lt_fcat) = VALUE lvc_t_fcat( ( col_pos = '1'
fieldname = 'AIRLINE_CODE'
coltext = '항공편'
key = 'X'
just = 'L' )
( col_pos = '2'
fieldname = 'FLDATE'
coltext = '비행 날짜'
just = 'L' )
( col_pos = '3'
fieldname = 'BOOKID'
coltext = '예약 번호'
just = 'L' )
).
해당 코드 예제 처럼 #을 대신해서 구조를 적어주면 데이터를 생성할때 해당 위치의 구조와 일치한 데이터가 생성된다.
BASE
BASE 구문을 추가하면 인터널 테이블에서 다른 인터널 테이블로 루프사용 없이 데이터를 넘길 수 있다.
<itab1> = VALUE #( ( <col1> = <val>
<col2> = <val> )
( ... )
).
<itab2> = VALUE #( BASE <itab1>
( <col1> = <val>
<col2> = <val> )
( <col1> = <val>
<col2> = <val> )
( ... )
).
위의 구조처럼 작성한다면 루프나 'CORRESPONDING'구문을 활용하지 않고도 <itab1>의 데이터를 <itab2>에 할당 할 수 있다.
예제 코드
TYPES: BEGIN OF st_connection,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
carrname TYPE s_carrname,
END OF st_connection.
DATA: result TYPE TABLE OF st_connection.
result = VALUE #( ( carrid = 'AA'
connid = '0017'
carrname = 'My Airline' )
( carrid = 'LH'
connid = '0064'
carrname = 'Your Airline' )
).
DATA(result2) = VALUE #( BASE result
( carrid = 'BB'
connid = '9999'
carrname = 'lol' )
).
- 끝 -
'SAP ABAP' 카테고리의 다른 글
SAP HANA Core ABAP Skill - IF 구문 연산자 정리 (0) | 2025.03.23 |
---|---|
SAP HANA Core ABAP Skill - SQL CASE 구문 정리 (0) | 2025.02.12 |
SAP HANA Core ABAP Skill - ABAP SQL 문법 정리 (0) | 2025.02.12 |
SAP ABAP - ALV Field Catalog 적용법 (0) | 2024.12.04 |
SAP ABAP - HTML(URL) Viewer 예제 (0) | 2024.12.02 |