테이블 생성시 반드시 넣어야하는 필드
-> MANDT
Domain 의 Value Range 을 통해 값의 범위를 지정가능하다.
그러나 대량의 데이터를 관리할때는
Value Table = Check Table 을 사용한다.
Text Table
테이블 내에서 GOT0 -> TEXT TABLE
Text Table의 key는 2개 (MANDT 제외)
- domain 없이 생성 가능
Data Type을 직접 적어줌
외래키
같은 domain을 가진 각 테이블의 필드들은 domain의 통제를 받는다.
PARAMETERS: pa_num TYPE N LENGTH 5
" 길이를 5로 정의하면 기본값이 '00000'로 된다. 마이너스 부호는 반영X
Type I
, P
인 경우는 마이너스 부호 적용가능.Type N
은 마이너스 부호 적용 불가능.C(Character)
타입. DATA: lv_num(5) TYPE c.
DATA: lv_num TYPE c LENGTH 5
위 아래는 같은 표현
Type C
인 경우에도 Number 인 경우 연산이 가능TYPE P
를 사용한다. DATA: pa_c(20) TYPE c,
pa_de(5) TYPE p DECIMALS 2,
pa_n1(8) TYPE n VALUE 678,
pa_ABC(10) TYPE c VALUE 'ABCDEFGHIJ',
pa_n2(12) TYPE n VALUE 365,
pa_num TYPE i VALUE 25,
pa_de1(3) TYPE p DECIMALS 2 VALUE '1.25'.
WRITE: / pa_n1, pa_ABC, pa_n2, pa_num, pa_de1.
Type P
인경우 Length 최대 길이 16
Type
VSLIKE
어떨 때 쓸까?
LIKE
: Local data type 변수를 참조할때 TYPE
: Global data type변수를 참조할때 DATA: lv_id TYPE zc2t260001-id.
DATA: lv_id2 LIKE lv_id.
DB 테이블을 참조하는 인터널테이블
DATA
: lt_data TYPE TABLE OF
zc2t070001.
DB 테이블을 참조하는 Work Area(로컬 스트럭쳐)
DATA
: ls_data TYPE
zc2t070001.
WorkArea(로컬 스트럭쳐)를 참조하는 인터널 테이블
DATA
: lt_data2 LIKE TABLE OF
ls_data.
INCLUDE STRUCTURE
을 이용하여 여러 필드(구조체)를 한번에 추가가능BEGIN OF
~ END OF
안에 들어가야함. INCLUDE STRUCTURE
는 여러번 사용 가능.
DATA
는 값을 저장하는 변수역할을 하지만,TYPES
는 구조만 정의할 뿐 아무런 기능이 없다. ( 값 저장 불가능)
🤠
include
는 왜 사용할까 ❔
- 각종 테이블에 들어있는 공통 필드를 묶어서 사용하면 관리가 용이!
DATA : ls_header TYPE zc2s070001, " zc2s070001를 참조하는 로컬스트럭쳐
lt_header LIKE TABLE OF ls_header, " ls_header를 참조하는 인터널 테이블
ls_head_tmp LIKE ls_header. " ls_header를 참조하는 로컬 스트럭쳐
"Standard Table EKPO의 필드의 Data Element를 참조하는 변수선언.
" Data elemnt를 직접 참조해서 선언한 변수
DATA : lv_loekz TYPE ELOEK,
lv_statu TYPE ASTAT,
lv_ematn TYPE EMATNR,
lv_werks TYPE EWERK.
" 필드를 참조하는 변수 선언
" Table의 field를 참조해서 선언한 변수
DATA : lv_bpumn LIKE ekpo-bpumn,
lv_bpumz LIKE ekpo-bpumz,
lv_umrez LIKE ekpo-umrez,
lv_umren LIKE ekpo-umren,
lv_netpr LIKE ekpo-netpr.
"위에 선언된 변수들을 참조하는 변수 선언.
" 로컬 변수를 참조해서 선언한 변수
DATA : lv_loekz_2 LIKE loekz,
lv_statu_2 LIKE statu,
lv_ematn_2 LIKE ematn,
lv_werks_2 LIKE werks,
lv_bpumn_2 LIKE bpumn,
lv_umrez_2 LIKE umrez,
lv_umren_2 LIKE umren,
lv_netpr_2 LIKE netpr.
💡 변수 네이밍 룰
로컬 변수 :lv_변수명
전역 변수 :gv_변수명
개발 세팅 꿀팁 3개
LOOP AT 인터널테이블 INTO 스트럭쳐.
-> 테이블 전부 읽기*LOOP AT lt_header INTO ls_header.
* WRITE: / ls_header-bukrs,
* ls_header-belnr,
* ls_header-gjahr,
* ls_header-buzei,
* ls_header-bschl.
*ENDLOOP.
READ TABLE 인터널테이블 INDEX 1.
-> 테이블 한줄 읽기코드를 입력하세요
2-1. READ TABLE 인터널테이블 WITH KEY 조건
-> 테이블 조건 읽기
*READ TABLE lt_header INTO ls_header
*WITH KEY bukrs ='EFGH' bschl = 'BB'.
*
*WRITE: / ls_header-bukrs,
* ls_header-belnr,
* ls_header-gjahr,
* ls_header-buzei,
* ls_header-bschl.
CL_DEMO_OUTPUT=>DISPLAY( 인터널테이블 ).
-> 테이블전부읽기*cl_demo_output=>display( lt_header ).
DATA : BEGIN OF lty_data,
lv_carrid TYPE sflight-carrid,
lv_connid TYPE sflight-connid,
lv_fldate TYPE sflight-fldate,
lv_currency TYPE sflight-currency,
lv_planetype TYPE sflight-planetype,
lv_seatsocc_b TYPE sflight-seatsocc_b,
END OF lty_data.
DATA : ls_header LIKE lty_data.
DATA : lt_header LIKE TABLE OF ls_header.
" Table 틀린 문장..
***DATA : lt_header LIKE TABLE OF lty_data.
***DATA : ls_header LIKE lt_header.
SELECT carrid connid fldate currency planetype seatsocc_b
FROM sflight
INTO TABLE lt_header
WHERE planetype = '747-400'
AND currency = 'USD'.
LOOP AT lt_header INTO ls_header.
IF ls_header-lv_carrid = 'UA'.
ls_header-lv_seatsocc_b = ls_header-lv_seatsocc_b + 5.
MODIFY lt_header FROM ls_header.
ENDIF.
ENDLOOP.
cl_demo_output=>display( lt_header ).
DATA : BEGIN OF lty_data, lv_carrid TYPE sflight-carrid, lv_connid TYPE sflight-connid, lv_fldate TYPE sflight-fldate, lv_currency TYPE sflight-currency, lv_planetype TYPE sflight-planetype, lv_seatsocc_b TYPE sflight-seatsocc_b, END OF lty_data.
다음에 올 DATA 형식은?
😥" Table 틀린 문장..
DATA : lt_header LIKE TABLE OF lty_data.
DATA : ls_header LIKE lt_header.
😄 "맞는 문장
DATA : ls_header LIKE lty_data.
DATA : lt_header LIKE TABLE OF ls_header.
정답
REPORT zbc400_cl2_07_0802 MESSAGE-ID zc207.
DATA : BEGIN OF ls_data,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
currency TYPE sflight-currency,
planetype TYPE sflight-planetype,
seatsocc_b TYPE sflight-seatsocc_b,
END OF ls_data.
DATA : lt_header LIKE TABLE OF ls_data.
CLEAR ls_data.
REFRESH lt_header.
SELECT carrid connid fldate currency planetype seatsocc_b
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE lt_header
WHERE planetype = '747-400'
AND currency = 'USD'.
IF sy-subrc <> 0.
MESSAGE s001 . " Message class 사용시
LEAVE LIST-PROCESSING. " 1000번안에 있는 프로세스를 list 프로세스. 동작을 멈춰라
ENDIF.
LOOP AT lt_header INTO ls_data.
IF ls_data-carrid = 'UA' AND ls_data-planetype = '747-400'.
ls_data-seatsocc_b += 5.
MODIFY lt_header FROM ls_data INDEX sy-tabix
TRANSPORTING seatsocc_b.
ENDIF.
ENDLOOP.
cl_demo_output=>display( lt_header ).