0802 개념정리

AppleTree·2022년 8월 2일
0
  • KEY : 중복 되선 안되는 값 EX) 주민번호, ID, ...

테이블 생성시 반드시 넣어야하는 필드
-> MANDT


1. Domain

  • Domain 의 Value Range 을 통해 값의 범위를 지정가능하다.
    그러나 대량의 데이터를 관리할때는

    Value Table = Check Table 을 사용한다.

  • Text Table

    테이블 내에서 GOT0 -> TEXT TABLE
    Text Table의 key는 2개 (MANDT 제외)

    2. Data Element

    1. domain 없이 생성 가능

Data Type을 직접 적어줌

외래키
같은 domain을 가진 각 테이블의 필드들은 domain의 통제를 받는다.


3. Data Type

PARAMETERS: pa_num TYPE N LENGTH 5 
" 길이를 5로 정의하면 기본값이 '00000'로 된다. 마이너스 부호는 반영X

  • Type I , P 인 경우는 마이너스 부호 적용가능.
  • Type N은 마이너스 부호 적용 불가능.
  • ABAP 은 마이너스 부호가 숫자 뒤에 붙음.
  • Type을 생략하면 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 VS LIKE 어떨 때 쓸까?

  • 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.


4. Internal Table

- INCLUDE STRUCTURE

  • INCLUDE STRUCTURE 을 이용하여 여러 필드(구조체)를 한번에 추가가능
  • BEGIN OF ~ END OF 안에 들어가야함.
  • INCLUDE STRUCTURE 는 여러번 사용 가능.

  • fac_bkpf_ext_glo 안에 들어있던 필드들을 ls_data에 담았다.

  • 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개

1. keyword 제외한 다른 텍스트도 추천해줌


2. Enhanced Search : 이상한 자동완성꺼줌


3. indent : 프리터 프린트할때 띄어쓰기도 봐줌.


  1. 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.

  1. 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.

  1. 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 ).

0개의 댓글