데이터베이스 및 테이블 작업

박재완·2025년 1월 25일

SAP ABAP (1 ~ 8일차)

목록 보기
6/8

1. Using Structured Data Objects

  • 구조화된 데이터 객체(Structured Data Objects)란?

    • ABAP에서 구조화된 데이터 객체는 여러 개의 필드(데이터 요소)를 묶어서 하나의 단위로 관리하는 데이터 타입입니다.
    • 구조화된 데이터 객체의 예:
      • 구조체 (Structures): 여러 필드(속성)를 하나의 데이터 객체로 정의.
      • 테이블 (Tables): 데이터 레코드의 집합.
  • 구조체 예제:

    TYPES: BEGIN OF ty_employee,
             id   TYPE i,
             name TYPE string,
             age  TYPE i,
           END OF ty_employee.
    
    DATA: ls_employee TYPE ty_employee.
    
    " 구조체 필드 값 설정
    ls_employee-id = 1.
    ls_employee-name = 'John Doe'.
    ls_employee-age = 30.
    
    " 구조체 데이터 출력
    WRITE: / 'ID:', ls_employee-id,
           / 'Name:', ls_employee-name,
           / 'Age:', ls_employee-age.

2. Using Internal Tables

  • 내부 테이블(Internal Tables)란?

    • 내부 테이블은 ABAP에서 데이터의 집합(다중 레코드)을 메모리 상에서 저장하고 처리하기 위한 데이터 객체입니다.
    • 데이터베이스 테이블과는 달리, 내부 테이블은 프로그램 실행 중에만 존재합니다.
  • 내부 테이블의 유형:

    1. 표준 테이블 (Standard Table):
      • 순서대로 저장되고, 기본적으로 인덱스 기반 검색.
    2. 정렬 테이블 (Sorted Table):
      • 키 값 기준으로 정렬된 상태로 유지.
    3. 해시 테이블 (Hashed Table):
      • 고유한 키를 기반으로 빠른 검색 가능.
  • 내부 테이블 정의 및 사용 예제:

    TYPES: BEGIN OF ty_employee,
             id   TYPE i,
             name TYPE string,
           END OF ty_employee.
    
    DATA: lt_employees TYPE TABLE OF ty_employee,
          ls_employee  TYPE ty_employee.
    
    " 데이터 삽입
    ls_employee-id = 1.
    ls_employee-name = 'Alice'.
    APPEND ls_employee TO lt_employees.
    
    ls_employee-id = 2.
    ls_employee-name = 'Bob'.
    APPEND ls_employee TO lt_employees.
    
    " 데이터 출력
    LOOP AT lt_employees INTO ls_employee.
      WRITE: / 'ID:', ls_employee-id, 'Name:', ls_employee-name.
    ENDLOOP.
  • 내부 테이블 작업

    • 추가: APPEND, INSERT.
    • 삭제: DELETE.
    • 수정: MODIFY.
    • 정렬: SORT.
    • 읽기: READ TABLE.

3. Retrieving Single/Multiple Database Records

  • ABAP에서 데이터베이스 접근

    • ABAP 프로그램은 Open SQL을 사용하여 데이터베이스에서 데이터를 읽거나 쓸 수 있습니다.
    • Open SQL은 데이터베이스 독립적인 쿼리 언어입니다.
  • 단일 레코드 조회:

    DATA: lv_name TYPE string.
    
    SELECT SINGLE name
      INTO lv_name
      FROM zemployee
      WHERE id = 1.
    
    WRITE: / 'Employee Name:', lv_name.
    • SINGLE: 조건에 맞는 첫 번째 레코드만 조회.
  • 다중 레코드 조회:

    TYPES: BEGIN OF ty_employee,
             id   TYPE i,
             name TYPE string,
           END OF ty_employee.
    
    DATA: lt_employees TYPE TABLE OF ty_employee.
    
    SELECT id name
      INTO TABLE lt_employees
      FROM zemployee
      WHERE age > 30.
    
    LOOP AT lt_employees INTO DATA(ls_employee).
      WRITE: / 'ID:', ls_employee-id, 'Name:', ls_employee-name.
    ENDLOOP.
    • INTO TABLE: 여러 레코드를 내부 테이블로 가져옴.

4. Creating Transparent Tables

  • 투명 테이블(Transparent Tables)이란?

    • SAP 시스템에서 물리적 데이터베이스 테이블과 직접 매핑되는 테이블입니다.
    • SAP ABAP Dictionary (SE11)에서 생성하며, 데이터가 데이터베이스에 1:1로 저장됩니다.
  • 투명 테이블 생성 절차:

    1. SE11 트랜잭션으로 이동.
    2. 테이블 이름 입력 후 "Create" 버튼 클릭.
    3. Fields 탭에서 필드 정의:
      • 필드 이름, 데이터 타입, 길이 설정.
    4. Technical Settings 탭:
      • 데이터 저장 설정 (Cluster, Pooled, Transparent).
    5. 테이블 활성화(Activate).
  • 투명 테이블 사용 예제:

    INSERT INTO zemployee VALUES (1, 'John', 30).
    SELECT * FROM zemployee INTO TABLE lt_employees.

5. Defining Foreign Keys to Perform Input Checks

  • 외래 키(Foreign Keys)란?

    • 외래 키는 하나의 테이블의 필드가 다른 테이블의 기본 키와 연관될 때 정의됩니다.
    • 외래 키를 통해 데이터 무결성을 보장하며, 입력 데이터에 대한 유효성 검사를 수행할 수 있습니다.
  • 외래 키 설정 절차:

    1. SE11에서 테이블 편집.
    2. Foreign Keys 탭에서 외래 키 정의.
      • 참조 테이블과 필드를 지정.
    3. 외래 키 관계 활성화.
  • 예제:

    • 고객 테이블 (ZCUSTOMER):
      • 필드: CUSTOMER_ID, CUSTOMER_NAME.
    • 주문 테이블 (ZORDER):
      • 필드: ORDER_ID, CUSTOMER_ID, ORDER_DATE.
    • CUSTOMER_ID 필드에 ZCUSTOMER의 CUSTOMER_ID를 참조하는 외래 키 정의.
  • 입력 검증 예제:

    INSERT INTO zorder VALUES ('O123', 'C001', '2025-01-25').
    " C001이 ZCUSTOMER 테이블에 존재하지 않으면 입력 거부.

요약

  1. 구조화된 데이터 객체: 구조체와 내부 테이블을 사용하여 데이터를 효율적으로 관리.
  2. 내부 테이블: 데이터 레코드 집합을 메모리에서 관리.
  3. 데이터베이스 레코드 조회: Open SQL을 사용하여 단일/다중 레코드 검색.
  4. 투명 테이블: 데이터베이스와 1:1 매핑되는 물리적 테이블.
  5. 외래 키: 데이터 무결성을 보장하며, 입력 검증 수행.
profile
안녕하세요!

0개의 댓글