💻 SAP/ABAP

ABAP - 8일차

DevLevi 2024. 6. 16. 02:46

📜목차

🚩개요

 

1. Syntax

 1.1. TYPES :
 1.2. DATA :

 1.3. WA(work area)
 1.4. APPEND v1 TO v2

 1.5. SELECT (SINGLE) * INTO CORRESPONDING FIELD OF

 1.6. LOOP AT v1 INTO v2

 1.7. INCLUDE STRUCTURE

 1.8. READ TABLE v1 INTO v2 WITH KEY


🚩개요

6일 동안 ABAP의 한 챕터를 끝내고서, 낯선 Syntax위주로 정리해보려고 합니다.


1. Syntax

 

 1.1 TYPES :

기본 데이터 타입을 만들 때는 "TYPES: 타입명 TYPE 전역타입"으로 정의합니다.

 

구조체 타입을 선언할 때는 BEGIN OF로 시작하여 타입명을 선언하고 타입을 정의합니다. 구조체의 마무리는 END OF로 합니다. 이렇게 정의된 타입은 INCLUDE문을 사용하면 전역 타입으로 다른 프로그램에서도 사용할 수 있습니다.

 

 1.2. DATA :

위에서 타입을 정의했던 했던 loc_dec 타입을 실제로 operand1, operand2 변수에 할당할 수 있습니다.

물론, 구조체 타입으로 정의한 ty_person 타입도 변수에 할당할 수 있습니다. 그러나 구조체 타입을 할당했다는 의미는 값을 담을 수 있는 데이터 구조의 틀이 만들어졌을 뿐, 데이터는 직접 대입해줘야 합니다.

구조체에 존재하는 각각의 필드에 값을 대입하고, 출력해봅니다.

직접 구조체 타입을 정의하지 않더라도, 글로벌 데이터 타입으로 변수를 선언할 수 있습니다. 이 경우 해당 타입의 내부 구조(필드 구성)를 자동으로 상속받게 됩니다.

TYPE TABLE OF문은 동일한 데이터 구조를 가지는 여러 행으로 구성된 변수를 만들 수 있게 해줍니다. LIKE LINE OF문은 이미 선언된 변수의 데이터 구조를 참조하여 새로운 변수를 선언할 때 사용합니다. 참고로 LIKE문은 단일 필드 단위로 복사합니다.

 

 1.3. WA(work area)

Work Area는 독일 개발자들이 채택한 SAP만의 고유처리 방법입니다. 낯설어서 이해하기 어려웠던 부분이기도 합니다. 공부하며 파악한 핵심은 WA는 한 개의 레코드 데이터만을 저장하기 위한 임시 작업공간이라는 것 입니다.  it_person의 데이터 구조를 변수에 할당받고, START-OF-SELECTION문이 시작되면 계속해서 한 개의 레코드만 저장하고, 다시 it_person으로 넘겨주는 것을 볼 수 있습니다. 이는 특정 필드에 잘못된 값이 들어가는 일을 사전에 방지할 수 있으므로  데이터 무결성을 지킬 수 있습니다. 그리고 코드의 가독성상에서도 it_person에 데이터를 직접 대입시키는 것보다 WA를 통해서 APPEND 하는게 여러 레코드를 한 눈에 살펴볼 수 있는 더 직관적인 코드라 할 수 있겠습니다.

 

 1.4. APPEND v1 TO v2

WA에서 레코드를 먼저 저장하며 데이터 무결성을 확인하고, APPEND TO 문법을 통해 it_person 내부 테이블에 총 4개의 레코드를 추가해줬습니다.

 

 1.5. SELECT (SINGLE) * INTO CORRESPONDING FIELD OF

SELECT SINGLE * INTO CORRESPONDING FIELDS OF문은 조건에 만족하는 행 중에 첫 번째 행만 선택하여 변수에 저장합니다. 당연히 FROM으로부터 가져오는 테이블과 it_scarr테이블의 데이터 구조는 동일해야 합니다. 

SELECT * INTO CORRESPONDING FIELDS OF TABLE문은 조건에 만족하는 모든 행을 선택하여 it_scarr변수에 저장합니다.

SELECT FROM문에 v1 FOR ALL ENTRIES IN v2를 추가하면 두 개의 테이블을 조인하여 WHERE조건을 걸 수 있습니다.

 

 1.6. LOOP AT v1 INTO v2

LOOP AT 변수1 INTO 변수2 구문은 변수1의 데이터를 첫 번째 행부터 마지막 행까지 변수2로 모두 옮겨담습니다. WRITE문은 반복이 돌아간 횟수 만큼 각 레코드를 순차적으로 출력합니다. IF 조건문 외에도 ELSE문도 자바와 유사합니다.

 

 1.7. INCLUDE STRUCTURE

INCLUDE STRUCTURE문을 사용하여 sflight 구조체의 데이터 구조를 ty_main으로 모두 가져옵니다. 추가로 ty_main에 carrname, countryfr, countryto 단일 필드를 복사합니다.

 

 1.8. READ TABLE v1 INTO v2 WITH KEY

SELECT문은 DB테이블에서 데이터를 가져올 때 사용하고, READ TABLE 구문은 내부 테이블에서 데이터를 가져올 때 사용합니다. WITH KEY는 SELECT문의 WHERE문과 같습니다.