REPORT zhello_world.
WRITE: 'Hello, World!'.
모든 ABAP 프로그램은 프로그램 헤더로 시작한다.
REPORT zexample_program. " 프로그램 이름 zexample_program 정의
REPORT zexample_program. " 프로그램 이름을 정의
DATA: lv_variable TYPE i. " 변수 선언
START-OF-SELECTION. " 메인 프로그램 실행 구간 시작
WRITE: / 'Hello, World!'. " 화면에 출력
END-OF-SELECTION. " 프로그램 실행 구간 끝
DATA: lv_counter TYPE i, " 정수형 변수 lv_counter 선언
lv_name TYPE string. " 문자열 변수 lv_name 선언DATA: lt_table TYPE TABLE OF string, " 문자열을 요소로 가지는 내부 테이블 lt_table 선언
ls_row TYPE string. " 문자열 변수 ls_row 선언CONSTANTS: lc_max_value TYPE i VALUE 100. " 정수형 상수 lc_max_value 선언 및 초기값 100 할당TYPES: BEGIN OF ty_person, " 구조체 ty_person 정의 시작
name TYPE string, " 문자열 필드 name 선언
age TYPE i, " 정수형 필드 age 선언
END OF ty_person. " 구조체 ty_person 정의 끝
DATA: ls_person TYPE ty_person. " ty_person 타입의 구조체 변수 ls_person 선언
lv_counter = lv_counter + 1. " lv_counter 변수의 값을 1 증가
lv_name = 'John Doe'. " lv_name 변수에 'John Doe' 문자열 할당
IF문
IF lv_counter > 10. " lv_counter가 10보다 크면
WRITE: / 'Counter is greater than 10'. " 'Counter is greater than 10' 출력
ELSEIF lv_counter = 10. " lv_counter가 10과 같으면
WRITE: / 'Counter is equal to 10'. " 'Counter is equal to 10' 출력
ELSE. " 그 외의 경우
WRITE: / 'Counter is less than 10'. " 'Counter is less than 10' 출력
ENDIF.
CASE문
CASE lv_counter.
WHEN 1.
WRITE: / 'Counter is 1'. " lv_counter가 1인 경우 'Counter is 1' 출력
WHEN 2.
WRITE: / 'Counter is 2'. " lv_counter가 2인 경우 'Counter is 2' 출력
WHEN OTHERS.
WRITE: / 'Counter is neither 1 nor 2'. " 그 외의 경우 'Counter is neither 1 nor 2' 출력
ENDCASE.
DO문 (고정 반복)
DO 10 TIMES. " 10회 반복
WRITE: / 'Hello, World!'. " 'Hello, World!' 출력
ENDDO.
WHILE문 (조건 반복)
WHILE lv_counter < 10. " lv_counter가 10보다 작은 동안 반복
lv_counter = lv_counter + 1. " lv_counter 값을 1 증가
WRITE: / lv_counter. " 증가된 lv_counter 값 출력
ENDWHILE.
LOOP AT문 (내부 테이블 반복)
LOOP AT lt_table INTO ls_row. " lt_table 내부 테이블의 각 행을 ls_row 변수에 할당하며 반복
WRITE: / ls_row. " ls_row 값 출력
ENDLOOP.
FORM calculate_sum USING value1 TYPE i " 서브루틴 calculate_sum 정의, 입력 파라미터 value1
value2 TYPE i " 입력 파라미터 value2
CHANGING result TYPE i. " 변경 파라미터 result
result = value1 + value2. " result에 value1과 value2의 합 할당
ENDFORM.
FUNCTION zexample_function.
IMPORTING
value1 TYPE i " 입력 파라미터 value1
value2 TYPE i " 입력 파라미터 value2
EXPORTING
result TYPE i. " 출력 파라미터 result
result = value1 + value2. " result에 value1과 value2의 합 할당
ENDFUNCTION.
CLASS lcl_example DEFINITION.
PUBLIC SECTION.
METHODS: calculate_sum IMPORTING iv_value1 TYPE i " 메서드 calculate_sum 정의, 입력 파라미터 iv_value1
iv_value2 TYPE i " 입력 파라미터 iv_value2
RETURNING VALUE(rv_result) TYPE i. " 반환 파라미터 rv_result
ENDCLASS.
CLASS lcl_example IMPLEMENTATION.
METHOD calculate_sum.
rv_result = iv_value1 + iv_value2. " rv_result에 iv_value1과 iv_value2의 합 할당
ENDMETHOD.
ENDCLASS.
TRY.
" 예외가 발생할 수 있는 코드
CATCH cx_sy_arithmetic_error INTO DATA(lx_arith_error). " 산술 오류 예외 처리
WRITE: / 'Arithmetic error occurred'. " 'Arithmetic error occurred' 출력
CATCH cx_sy_itab_line_not_found INTO DATA(lx_line_not_found). " 내부 테이블 라인 미발견 예외 처리
WRITE: / 'Line not found in internal table'. " 'Line not found in internal table' 출력
ENDTRY.REPORT zselect_example.
DATA: lt_flight TYPE TABLE OF sflight,
ls_flight TYPE sflight.
SELECT * INTO TABLE lt_flight FROM sflight WHERE carrid = 'LH'.
LOOP AT lt_flight INTO ls_flight.
WRITE: / ls_flight-carrid, ls_flight-connid, ls_flight-fldate.
ENDLOOP.
SELECT * INTO TABLE lt_table " 테이블 sflight의 모든 데이터를 lt_table 내부 테이블에 선택하여 저장
FROM sflight
WHERE carrid = 'LH'. " 조건: 항공사 코드가 'LH'인 경우INSERT INTO sflight VALUES ('LH', '400', '20230729', 'FRA', 'JFK', '747', 200, 150, 50). " 테이블 sflight에 새 레코드 삽입UPDATE sflight SET seatsmax = 300 " 테이블 sflight에서 조건에 맞는 레코드의 seatsmax 필드를 300으로 업데이트
WHERE carrid = 'LH' AND connid = '400'. " 조건: 항공사 코드가 'LH'이고 연결 ID가 '400'인 경우DELETE FROM sflight " 테이블 sflight에서 조건에 맞는 레코드 삭제
WHERE carrid = 'LH' AND connid = '400'. " 조건: 항공사 코드가 'LH'이고 연결 ID가 '400'인 경우MESSAGE 'This is an information message' TYPE 'I'. " 정보 메시지 출력
lv_int = CONV i( lv_string ). " lv_string을 정수형으로 변환하여 lv_int에 할당FIELD-SYMBOLS: <fs_value> TYPE any. " 모든 타입을 참조할 수 있는 필드 심볼 <fs_value> 선언
ASSIGN lv_counter TO <fs_value>. " lv_counter 변수를 <fs_value> 필드 심볼에 할당
IF sy-subrc = 0. " 할당 성공 시
WRITE: / <fs_value>. " <fs_value> 값을 출력 (lv_counter의 값)
ENDIF.
DATA(lv_method_name) = 'calculate_sum'. " 호출할 메서드 이름을 lv_method_name에 할당
CALL METHOD lcl_example=>lv_method_name " 동적 메서드 호출
EXPORTING
iv_value1 = 10
iv_value2 = 20
RECEIVING
rv_result = lv_result.
이벤트 선언
CLASS lcl_event_example DEFINITION.
PUBLIC SECTION.
EVENTS: event_example. " 이벤트 event_example 선언
METHODS: trigger_event. " 메서드 trigger_event 선언
ENDCLASS.
CLASS lcl_event_example IMPLEMENTATION.
METHOD trigger_event.
RAISE EVENT event_example. " event_example 이벤트 발생
ENDMETHOD.
ENDCLASS.
이벤트 핸들러
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS: on_event_example FOR EVENT event_example OF lcl_event_example. " 이벤트 핸들러 메서드 on_event_example 선언
ENDCLASS.
CLASS lcl_handler IMPLEMENTATION.
METHOD on_event_example.
WRITE: / 'Event triggered'. " 'Event triggered' 메시지 출력
ENDMETHOD.
ENDCLASS.
이벤트 연결
DATA: lo_example TYPE REF TO lcl_event_example, " lcl_event_example 클래스의 인스턴스 참조 변수 lo_example 선언
lo_handler TYPE REF TO lcl_handler. " lcl_handler 클래스의 인스턴스 참조 변수 lo_handler 선언
CREATE OBJECT lo_example. " lcl_event_example 클래스의 인스턴스 생성
CREATE OBJECT lo_handler. " lcl_handler 클래스의 인스턴스 생성
SET HANDLER lo_handler->on_event_example FOR lo_example. " lo_example 객체의 event_example 이벤트에 lo_handler->on_event_example 핸들러 연결
CALL METHOD lo_example->trigger_event. " lo_example 객체의 trigger_event 메서드 호출