ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Data Type] Assigning value & 기타변수 선언
    SAP/Abap 2022. 1. 11. 17:10

    [Assigning value: 값 할당]

    1) 기본 값 할당

    Abap program에서는 변수 선언시 VALUE구문을 사용하여 초기값을 할당하거나, 이후 값 할당 연산자들을 통해 변수에 값을 할당할 수 있다.
    * 변수 <f2>에 <f1>의 값을 할당하는 연산자.
    <f2> = <f1>.
    MOVE <f1> TO <f2>.
    MOVE-CORRESPONDING <f1> TO <f2>.
    WRITE <f1> TO <f2> [<option>].
    • MOVE-TO 구문: Equal(=) 연산자와 동일한 의미를 갖는다.
      • 구조체를 대상으로 값을 할당하는 경우 필드이름에 상관없이 순서대로 값이 할당된다.
      • 형변환이 가능하고 위의 예에서 <f1>의 data type이 <f2>의 data type으로 변경된다.
    • MOVE-CORRESPONDING-TO 구문: 구조체를 대상으로 값을 할당하는 경우 자주 사용한다.
    • WRITE TO 구문: 리스트 출력과는 다른 용도이며, <f1>의 내용을 type c로 형변환하여 <f2>에 할당한다.
      • 즉, <f1>은 Character형으로 변환이 가능한 data type이어야 한다.
    REPORT ZA02_20.
    
    DATA : BEGIN OF gs_ren,
      name(20)     VALUE 'Kim Joohyung',
      country(10)  VALUE 'KOREA',
      city(20)     VALUE 'SEOUL',
    END OF gs_ren.
    
    * MOVE-CORRESPONDING: 두 구조체사이 같은 필드이름에 값이 복사된다.
    DATA : BEGIN OF gs_info1,
      name(20),
      city(20),
      phone(10)    VALUE '1521001234',
    END OF gs_info1.
    
    MOVE-CORRESPONDING gs_ren TO gs_info1.
    WRITE :/ gs_info1-name, gs_info1-city, gs_info1-phone.
    
    * MOVE: 두 구조체사이 필드이름에 상관없이 순서대로 값이 복사된다.
    DATA : BEGIN OF gs_info2,
      col1(20),
      col2(20),
      col3(20),
    END OF gs_info2.
    
    MOVE gs_ren TO gs_info2.
    WRITE :/ gs_info2-col1, gs_info2-col2, gs_info2-col3.

     

    2) Offset을 이용한 값 할당

    Offsets and Lengths를 사용하면 필드의 일부 값을 정의할 수 있다.
    MOVE <f1> [+<p1>] [(<l1>)] TO <f2> [+<p2>] [(<l2>)].

    f1 필드의 인덱스 p1부터 l1길이 만큼 복사하여 f2필드의 인덱스 p2부터 길이 l2만큼의 영역에 할당
    REPORT ZA02_21.
    
    DATA : gv_f1(8) VALUE 'ABCDEFGH',
           gv_f2(8).
    
    DATA : gv_start  TYPE i VALUE 2,
           gv_length TYPE i VALUE 4.
    
    MOVE gv_f1 TO gv_f2.
    WRITE :/ gv_f2.
    
    CLEAR : gv_f2.
    * gv_f1의 2번 인덱스부터 길이 3만큼 gv_f2에 할당.
    MOVE gv_f1+2(3) TO gv_f2.
    WRITE :/ gv_f2.

     

    3) 구조체의 산술계산

    MOVE-CORRESPONDING 구문을 통해 구조체간 필드값의 할당이 가능한것과 같이 다음 구문으로 구조체간 산술연산이 가능하다.
    ADD-CORRESPONDING-BY: 덧셈연산
    SUBTRACT-CORRESPONDING-BY: 뺄셈연산
    MULTIPLY-CORRESPONDING-BY: 곱셈연산
    DIVIDE-CORRESPONDING-BY: 나눗셈연산
    REPORT ZA02_22.
    
    DATA : BEGIN OF gs_rate,
      kim TYPE f VALUE '0.8',
      lee TYPE f VALUE '1.0',
    END OF gs_rate.
    
    DATA : BEGIN OF gs_result,
      kim TYPE i VALUE 95,
      lee TYPE i VALUE 70,
    END OF gs_result.
    
    MULTIPLY-CORRESPONDING gs_result BY gs_rate.
    
    WRITE :/ 'Test Result: ', 'KIM: ', gs_result-kim, 'LEE: ', gs_result-lee.

     

     

    [기타 변수 선언]

    1) Constants

    프로그램 내부에서 자주 변하지 않고 자주 사용되는 값을 상수(Constants)로 선언하여 사용한다.
    Constants type 변수는 선언시 VALUE구문을 이용한 초기화가 필요하다.
    Constants type은 일반상수, 구조체상수가 있으며 해당 constants는 프로그램 내부에서 변경이 불가능하다. 
    REPORT ZA02_23.
    
    CONSTANTS : c_company(10) VALUE 'EASY ABAP'.		" 일반상수 선언
    
    CONSTANTS : BEGIN OF c_people,						" 구조체 상수 선언
      name(20)     VALUE 'Kim Joohyung',
      country(10)  VALUE 'KOREA',
    END OF c_people.
    
    WRITE :/ c_company, c_people-name, c_people-country.

     

    2) Statics

    프로그램의 subroutines(FORM, FUNCTION) 내부에서 자주 사용되는 변수값을 지속적으로 저장해야하는 경우 사용한다.
    Subroutines 내부에서 선언된 local 변수는 프로그램이 종료될때 까지 값을 유지한다.

    * 아래 예제에서 STATICS 대신 DATA 구문을 사용한다면 해당 변수는 FORM구문이 호출될때 마다 초기화 된다.

    REPORT ZA02_24.
    
    DO 3 TIMES.				" Block 내부 구문(FORM 호출) 3회 반복수행
      PERFORM call_subr.
    ENDDO.
    
    FORM call_subr.
      STATICS lv_val TYPE i.
      lv_val = lv_val + 1.
      WRITE :/ 'STATIC Variable: ', lv_val.
    ENDFORM.

     

    3) Tables

    TABLES 구문을 사용하여 Abap Dictionary table, View, Structure 선언 시, 해당 요소와 같은 data object가 생성된다.
    해당 data object는 이후 프로그램 내에서 구조체처럼 사용이 가능해진다.
    REPORT ZA02_26.
    
    TABLES: scarr.
    
    SELECT * FROM scarr.
      WRITE :/ scarr-carrid, scarr-carrname.
    ENDSELECT.

    'SAP > Abap' 카테고리의 다른 글

    [Open SQL & Native SQL] SELECT  (0) 2022.01.12
    [Open SQL & Native SQL] Overview  (0) 2022.01.11
    [Data Type] ABAP dictionary's type  (0) 2022.01.11
    [Data Type] Program's local type  (0) 2022.01.11
    [Data Type] Predefined ABAP Type: Other types  (0) 2022.01.10
Designed by Tistory.