String에 있는 함수

함수 기능 예시
FIND 문자열 찾기 FIND 'ABAP' IN lv_text.
REPLACE 문자열 바꾸기 REPLACE 'A' WITH 'B' INTO lv.
TRANSLATE 대소문자 변환 TRANSLATE lv TO LOWER CASE.
SHIFT 왼쪽/오른쪽 밀기 SHIFT lv LEFT DELETING LEADING space.
CONDENSE 공백 줄이기 CONDENSE lv.
OVERLAY 문자 덮어쓰기 OVERLAY lv WITH '***'.
CONCATENATE 연결 CONCATENATE a b INTO c.
SPLIT 나누기 SPLIT lv AT ',' INTO x y.

 

 

1. FIND – 문자열 찾기

- 문자열 안에 특정 단어가 존재하는지 확인

기본 문법

FIND '찾을문자' IN lv_text.

예제

DATA : gv_str type string,
	gv_chr(4) type c.
    
    gv_str = 'ABAP'.
    gv_chr = 'B'.
    
    find gv_chr in gv_str.
    if st_subrc eq 0.
    	write 'B FOUND'.
    endif.

=> B FOUND 출력!

위치를 알고 싶을 때 / 기본 문법

FIND 'abap' IN lv_text match offset lv_pos.

 

예제

DATA: lv_text TYPE string VALUE 'I love ABAP programming.',
      lv_pos  TYPE i.

FIND 'ABAP' IN lv_text MATCH OFFSET lv_pos.

WRITE: / 'ABAP 위치:', lv_pos.

결과 : ABAP 위치 : 7 (7번째 인덱스부터 시작)

 

2. REPLACE – 문자열 교체

문자열 안의 특정 단어를 다른 단어로 바꿈

기본 문법

 
REPLACE '기존문자' WITH '새문자' INTO lv_text.

예시

DATA lv_text TYPE string VALUE 'I love ABAP!'.
REPLACE 'love' WITH 'like' INTO lv_text.
WRITE: / lv_text. " 결과: I like ABAP!

예시2.

gv_str = 'ABAP'.
gc_chr = 'BBAP'.
REPLACE 'ABAP' WITH gv_chr INTO gv_str.
WRITE / gv_str.

=> 결과 : BBAP 

 

 

3. TRANSLATE – 대소문자 변환

대문자 ↔ 소문자 변환

문법

 
TRANSLATE lv_text TO UPPER CASE. " 대문자 
TRANSLATE lv_text TO LOWER CASE. " 소문자
 
예시

 

 
DATA lv_text TYPE string VALUE 'abap is great'. 
TRANSLATE lv_text TO UPPER CASE. 
WRITE: / lv_text. " 결과: ABAP IS GREAT

 

 

4. SHIFT – 문자 밀기

문자열을 왼쪽/오른쪽으로 밀면서 공백 제거 가능

 

문법

SHIFT lv_text LEFT DELETING LEADING space.
 

예시

 
DATA lv_text TYPE string VALUE ' ABAP!    '.
SHIFT lv_text LEFT DELETING LEADING space.
WRITE: / lv_text. " 결과: 'ABAP!    '

 

예시2 기본 shift 문법 (왼쪽이동)

gv_str = 'ABAP'.
SHIFT gv_str.
WRITE / gv_str.  " 결과 'BAP'

- 기본으로 shift문법은 왼쪽으로 이동이다. 

구문 설명
SHIFT lv LEFT 왼쪽으로 한 글자 밀기 (기본)
SHIFT lv RIGHT 오른쪽으로 한 글자 밀기
SHIFT lv LEFT DELETING LEADING space 앞쪽 공백 전부 제거
SHIFT lv RIGHT CIRCULAR 순환 이동 (맨 끝 글자가 앞으로 옴)

 

예시: 순환 이동

DATA lv TYPE string VALUE 'ABAP'. 
SHIFT lv RIGHT CIRCULAR. 
WRITE: / lv. " 결과: PABA

 

5. CONDENSE – 공백 압축

여러 공백을 하나로 줄이기, 양끝 공백도 제거 가능

문법

CONDENSE lv_text. " 기본: 중간 공백 압축 + 앞뒤 제거
CONDENSE lv_text NO-GAPS. " 모든 공백 제거
 

예시

DATA lv_text TYPE string VALUE ' ABAP IS FUN '.
CONDENSE lv_text.
WRITE: / lv_text. " 결과: 'ABAP IS FUN'
 

=> 중간 공백 압축 + 앞 뒤 제거가 된다.

=> `condense lv_tex2 no-gaps1` 하면 공백이 다 제거된다.

 

6. OVERLAY – 문자 겹쳐쓰기

기존 문자열을 다른 문자로 덮어쓰기

문법

OVERLAY lv_target WITH '****'.
예시

 

DATA lv_text TYPE string VALUE 'ABAP'.
OVERLAY lv_text WITH '####'.
WRITE: / lv_text. " 결과: ####
gv_str = '  B .    p  '.
gv_chr = 'AAAA'.
overlay gv_str with gv_chr.
write / gv_str.

 

7. CONCATENATE – 문자열 연결

여러 문자열을 하나로 합침

문법

CONCATENATE lv1 lv2 INTO lv_result [SEPARATED BY space].
 

예시

 
DATA: lv1 TYPE string VALUE 'Hello', lv2 TYPE string VALUE 'World', lv_result TYPE string.
CONCATENATE lv1 lv2 INTO lv_result SEPARATED BY space.
WRITE: / lv_result. " 결과: Hello World

gv_str 변수에 gv_chr를 합친다.

 

8. SPLIT – 문자열 나누기

구분자를 기준으로 문자열 분해

문법

SPLIT lv_text AT ',' INTO lv_a lv_b.
 

예시

DATA: lv_text TYPE string VALUE 'ABAP,PROGRAMMING', lv_a TYPE string, lv_b TYPE string.
SPLIT lv_text AT ',' INTO lv_a lv_b.
WRITE: / lv_a, / lv_b. " 결과: ABAP / PROGRAMMING

 

 

 

* 연습하기*

'Hello_World_42' → 'Hello', 'World', '42'로 나누고,
숫자 부분은 숫자로 바꿔서 2 더한 결과 출력하기

data lv_str type string value 'Hello_world_42', lv_a type string, lv_b type string, lv_c type i.
split lv_str at '_' into lv_a lv_b lv_c.
lv_c = lv_c + 2.
write / lv_c.

=> welcome to abap world 만들기

DATA lv_text TYPE string VALUE '##HELLO_world42##'.

REPLACE ALL OCCURRENCES OF '##' IN lv_text WITH ''.
REPLACE ALL OCCURRENCES OF '_' IN lv_text WITH ' '.
REPLACE ALL OCCURRENCES OF REGEX '[0-9]' IN lv_text WITH ''.
TRANSLATE lv_text TO LOWER CASE.
CONDENSE lv_text.

WRITE: / lv_text.  " 결과: hello world

 

 

출력 => hello world ####

항목 TYPE C(고정 길이 문자) STRING(가변 길이 문자)
길이 선언 시 길이 고정 (LENGTH n) 길이 제한 없음 (논리적으로 2GB까지)
메모리 할당 정적 메모리 (스택 기반) 동적 메모리 (힙 영역)
자동 잘림 값이 길면 잘림 자동 확장 (잘리지 않음)
뒤에 공백 그대로 유지됨 (공백 채움) 필요 시 자동 제거 (CONDENSE 덜 필요)
성능 빠름, 가볍지만 제한적 유연하지만 약간 느릴 수 있음
문자열 조작 불편 (슬라이싱 등 불편) 유연 (연결, 길이 구하기, 조작 편함)
 

예제 비교

🔸 TYPE C

DATA: lv_c TYPE c LENGTH 5. lv_c = 'ABAPISFUN'. " → 'ABAPI'로 잘림 WRITE: / lv_c. " 출력: ABAPI

🔸 STRING

 
DATA: lv_s TYPE string. lv_s = 'ABAPISFUN'. " 전부 들어감 WRITE: / lv_s. " 출력: ABAPISFUN

 

 

메모리 구조 차이

  • TYPE C는 **컴파일 시 길이가 결정되므로 정적 메모리(스택)**에 저장됨
  • STRING은 실행 중에 메모리가 동적으로 할당됨 (힙 영역)
    → 그래서 길이 제한 없이 자유롭게 늘어날 수 있음

언제 어떤 걸 써야 할까?


상황 추천타입 이유
짧은 고정 필드 (예: 성별, 상태코드 등) TYPE C LENGTH 1~10 빠르고 메모리 절약
사용자 입력값, 설명, 긴 텍스트 등 STRING 길이 유동적이고 안전
파일 읽기, 로그, JSON 처리 STRING 데이터 길이 예측 불가

 

관련 함수


함수 설명
STRLEN() 문자열 길이 반환 (STRING에 최적)
CONCATENATE 문자열 연결
SPLIT, REPLACE, FIND 문자열 처리
CONDENSE 공백 제거 (C 타입에 자주 필요)

 

'SAP' 카테고리의 다른 글

easy abap 05.구조체 structure타입 선언  (0) 2025.05.07
easy abap 04. string 함수  (0) 2025.05.07
easy abap 02. 변수에 값 넣는 방법  (0) 2025.05.07
easy abap 01. 네이밍 규칙  (0) 2025.05.07
easy abap 00. 자료형  (0) 2025.05.06

abap에서 변수에 값을 넣는 방법은 뭐가 있을까?

Value 나 = 대입연산자 를 쓰는 경우 외에 또 뭐가 있을 지 궁금해졌다.

1. VALUE – 선언과 동시에 초기값

DATA lv_name TYPE c LENGTH 10 VALUE 'Konie'.

- 선언 시 사용가능

- 한 번에 초기값 넣을 때 편함

 

2. MOVE TO – 값 대입 (요즘은 안쓴다고함)

 
`MOVE 'Wonie' TO lv_name.`
  • 예전 스타일
  • 지금은 거의 사용 ❌ 하지 않는다고한다(가독성 낮고 불편)

3. = – 대입 연산자 

 
lv_name = 'Konie'.
  • 가장 널리 쓰이고, 간단하고 직관적
  • IF, CASE, 계산식 등과 잘 어울림

 

4. CLEAR – 변수 초기화 (기본값으로 설정)

CLEAR lv_name. " 문자열은 공백, 숫자는 0

 

5. REFRESH – 내부 테이블 초기화

REFRESH lt_data. " lt_data = internal table

📌 요건 내부 테이블 전용

6. MOVE-CORRESPONDING – 구조체 간 필드명 일치시 값 복사

MOVE-CORRESPONDING ls_source TO ls_target.
  • 두 구조체가 있을 때 같은 필드명끼리만 값이 복사됨
  • gs_emp-name = ls_emp-name. 이렇게 하나씩 안 써도 돼서 편함

 

7. READ TABLE + INTO – 내부 테이블에서 읽어서 변수에 넣기

READ TABLE lt_emp INTO ls_emp INDEX 1.
  • 내부 테이블에서 1행을 구조체에 대입

 

8. LOOP AT + INTO

LOOP AT lt_emp INTO ls_emp.
         lv_name = ls_emp-name.
ENDLOOP.

9. ASSIGN – 필드 심볼에 대입 (참조처럼)

 
FIELD-SYMBOLS: <fs_name> TYPE any.
ASSIGN lv_name TO <fs_name>.
<fs_name> = 'Konie'. " → 실제로는 lv_name이 바뀜

 

 

 

요약 표


방법 설명 많이 쓰는 지
VALUE 선언 시 초기값
MOVE TO 구식 대입
= 표준 대입 ✅✅✅
CLEAR 기본값 초기화
MOVE-CORRESPONDING 구조체 복사
READ INTO 테이블 → 구조체
ASSIGN 필드 심볼 참조 ⚠️ 고급용

 

'SAP' 카테고리의 다른 글

easy abap 04. string 함수  (0) 2025.05.07
easy abap 03. string vs c  (0) 2025.05.07
easy abap 01. 네이밍 규칙  (0) 2025.05.07
easy abap 00. 자료형  (0) 2025.05.06
SAP ABAP Programming for Beginners - 74 Sort  (0) 2025.04.24

1. 기본 문법 규칙


항목 규칙
최대 길이 대부분 30자까지 (객체마다 다름)
허용 문자 알파벳, 숫자, 밑줄(_)만 가능
시작 문자 알파벳으로 시작해야 함 (숫자로 시작 ❌)
대소문자 ABAP은 대소문자 구분 안 함, 하지만 소문자/카멜표기 사용 권장
예약어 금지 DATA, SELECT 같은 키워드는 변수명으로 못 씀

 

2. 접두어 

접두어 의미 예시
gv_ Global Variable (전역 변수) gv_count, gv_name
lv_ Local Variable (지역 변수) lv_age, lv_total
gt_ Global Table (전역 내부 테이블) gt_students, gt_data
lt_ Local Table (지역 내부 테이블) lt_output, lt_items
gs_ Global Structure (전역 구조체) gs_header
ls_ Local Structure (지역 구조체) ls_item
p_ 파라미터 (PARAMETERS/FORM/Function) p_date, p_id
s_ SELECT-OPTIONS s_matnr, s_range
f_ FORM 루틴 이름 f_print_footer
ty_ 로컬 타입 정의 (TYPES) ty_student, ty_order
l_ LOOP 안의 임시 변수 l_index, l_result
z 또는 y 커스텀 객체(prefix 필수) ZREPORT01, ZTABLE_CUSTOMER

 

3. 모듈/오브젝트 이름 규칙 (SAP 시스템 객체)


종류 접두어 예시
프로그램 Z, Y ZREPORT_PAYROLL
함수 모듈 Z_, Y_ Z_CALCULATE_TOTAL
클래스 ZCL_, YCL_ ZCL_INVOICE_HANDLER
인터페이스 ZIF_ ZIF_PAYMENT_CONTROL
테이블 Z ZCUSTOMER, ZORDER
도메인/데이터요소 Z ZAGE_TYPE, ZCUST_NAME

 

'SAP' 카테고리의 다른 글

easy abap 03. string vs c  (0) 2025.05.07
easy abap 02. 변수에 값 넣는 방법  (0) 2025.05.07
easy abap 00. 자료형  (0) 2025.05.06
SAP ABAP Programming for Beginners - 74 Sort  (0) 2025.04.24
SAP ABAP Programming for Beginners - 73 Delete  (0) 2025.04.24

모든 프로그래밍언어를 배울 땐 자료형이 어떤것이 있는 지 아는 것이 중요하다고 생각한다.

abap의 자료형에 대한 깊은 이해가 없고, 

선언에 어려움을 겪는 듯 하여 연습해서 공부하려고 한다.

 

 

이렇게만 해서는, 명확하게 자료형 & 결과에 대한 학습이 잘되지 않음을 느꼈다

gpt 공부법 시작

 

gpt에게 데이터 선언에 대한 질문을 해달라고 했고,

내가 완전히 자료형을 파악할 때까지 연습을 했다.

이 결과, apab의 자료형과 어떻게 쓰는 지, 특징을 파악할 수 있었다.

REPORT zdatatype_practice.

DATA: lv_int     TYPE I VALUE 12345,                  " 정수형
      lv_float   TYPE F VALUE '3.14159',              " 부동소수점
      lv_packed  TYPE P DECIMALS 2 VALUE '1234.56',   " 고정소수점 (통화형)
      lv_char    TYPE C LENGTH 10 VALUE 'ABAP',       " 고정 문자열
      lv_n       TYPE N LENGTH 8 VALUE '20250506',    " 숫자 문자열 (숫자만 입력 가능)
      lv_string  TYPE STRING VALUE 'Hello, ABAP!',    " 가변 문자열
      lv_date    TYPE D VALUE '20250506',             " 날짜 (YYYYMMDD)
      lv_time    TYPE T VALUE '153045',               " 시간 (HHMMSS)
      lv_hex     TYPE X VALUE 'FF',                   " 헥사값 (1 byte)
      lv_xstring TYPE XSTRING.                        " 가변 헥사 문자열

START-OF-SELECTION.

  lv_xstring = 'DEADBEEF'. " 16진수 문자열 대입

  WRITE: / '정수형(I):', lv_int,
         / '부동소수점(F):', lv_float,
         / '고정소수점(P):', lv_packed,
         / '고정 문자열(C):', lv_char,
         / '숫자 문자열(N):', lv_n,
         / '가변 문자열(STRING):', lv_string,
         / '날짜(D):', lv_date,
         / '시간(T):', lv_time,
         / 'HEX(X):', lv_hex,
         / 'XSTRING:', lv_xstring.

 

 

 lv_char    TYPE C LENGTH 10 VALUE 'ABAP',       " 고정 문자열 이기 때문에, 

'ABAP_ _ _ _ _ _ ''해서, 총 공백포함하여 10개의 문자열이 생성된다.

✅ ABAP SORT 문 – 내부 테이블 정렬하기


1️⃣ 기본 문법

SORT itab01.
  • 내부 테이블 itab01을 오름차순(ascending) 으로 정렬함.
  • 기본 키(primary key) 기준으로 정렬됨.b
  • 추가 조건이 없는 경우는 기본 정렬 방식으로 작동함.

2️⃣ BY 절을 사용한 정렬

SORT itab01 BY surname.
  • surname 필드 기준으로 정렬함.
  • 여러 필드로 정렬하고 싶으면 공백으로 필드명만 나열하면 됨.
 
SORT itab01 BY surname forename.

❌ 쉼표(,) 쓰지 않음!


3️⃣ 언어 특성을 반영한 정렬: AS TEXT

SAP 시스템은 전 세계 언어를 다루기 때문에 정렬 시 언어 특성을 고려할 수도 있어.

SORT itab01 AS TEXT BY surname forename.
  • 언어 기준 정렬 적용됨 (예: 독일어 ß, ä 같은 특수문자).
  • AS TEXT는 모든 필드에 적용됨.

특정 필드에만 AS TEXT 적용하고 싶다면?

SORT itab01 BY surname forename AS TEXT.
 
  • forename 필드에만 텍스트 정렬 적용됨.

4️⃣ 정렬 방향 지정 – ASCENDING, DESCENDING

SORT itab01 BY surname DESCENDING.
  • surname 필드를 기준으로 내림차순 정렬함.
SORT itab01 BY surname ASCENDING.
  • 오름차순은 기본값이므로 생략 가능하지만 명시할 수도 있다.

5️⃣ SORT 가능한 테이블 종류


테이블 종류사용가능여부 설명
Standard Table ✅ 가능 꼭 BY절을 사용해야 함
Sorted Table ✅ 가능 기본 키 기준으로 자동 정렬됨
Hashed Table ❌ 불가능 정렬 개념 자체가 없음 (인덱스도 없음)

🔍 정리 요약


기본 정렬 SORT itab.
특정 필드 기준 정렬 SORT itab BY surname.
다중 필드 기준 정렬 SORT itab BY surname forename.
내림차순 정렬 SORT itab BY surname DESCENDING.
언어 정렬 전체 적용 SORT itab AS TEXT BY surname forename.
언어 정렬 필드만 적용 SORT itab BY surname forename AS TEXT.

sort한 결과물

 

📌 내부 테이블에서 레코드 삭제하기 – DELETE 문


✅ 기본 개념

DELETE 문을 사용하면 내부 테이블에서 특정 레코드 하나 또는 조건에 맞는 여러 레코드를 삭제할 수 있다.

👉 삭제할 때 가장 빠른 방법은 인덱스(index) 를 이용하는 것!!!


① 인덱스를 이용한 삭제 (가장 빠름)

DELETE itab01 INDEX 3.
  • 내부 테이블 itab01의 3번째 레코드를 삭제함.
  • 헤더 라인(header line) 은 사용하지 않고, 테이블 본문(body) 을 직접 수정함.
  • standard table, sorted table에서만 가능 (hash table은 index 개념 없음).

② 루프 안에서 조건을 이용한 삭제

루프를 돌면서 특정 조건에 맞으면 삭제할 수도 있다.

LOOP AT itab01. IF surname = 'Smith'. DELETE itab01 INDEX sy-index. ENDIF. ENDLOOP.
  • sy-index는 현재 루프의 반복 횟수를 의미하는 시스템 변수.
  • 예: 루프가 5번째 돌고 있다면 sy-index = 5가 됨 → 5번째 레코드를 삭제함.
  • 중요: 루프 안에서 DELETE를 사용할 때는 꼭 INDEX sy-index 같이 인덱스를 명시해야 함.
    • 그렇지 않으면 ABAP 최신 문법에서는 에러가 날 수 있다.

③ WHERE 조건을 이용한 삭제

삭제할 레코드의 인덱스를 모를 때 사용!

DELETE itab01 WHERE surname = 'Smith'.
  • 내부 테이블에서 surname이 'Smith'인 모든 레코드를 삭제함.
  • 조건에 맞는 레코드를 하나만 삭제하는 게 아님!
    • 일치하는 레코드가 여러 개면 전부 삭제됨.
  • 항상 구체적인 조건을 쓰는 게 중요하다.

🔍 요약


방식 설명 특징
DELETE ... INDEX n n번째 레코드 삭제 가장 빠름, index 번호를 알아야 함
루프 안에서 sy-index 사용 현재 루프 위치의 레코드 삭제 루프 조건에 따라 삭제 가능
DELETE ... WHERE ... 조건에 맞는 모든 레코드 삭제 조건이 모호하면 모두 삭제됨

💡 주의사항

  • 루프 밖에서 DELETE를 쓰는 경우, INDEX 또는 WHERE를 반드시 사용해야 함.
  • 조건 없이 DELETE만 쓰면 에러 날 수 있음!
  • 특히 WHERE 조건을 쓸 때는, 삭제할 대상이 명확하도록 조건을 구체화하는 게 중요함.

 

📘 READ TABLE 문이란?

READ TABLE은 내부 테이블에서 특정 레코드 1개만 "직접" 읽어올 때 사용하는 명령어다.

보통 LOOP AT은 전체를 돌면서 하나씩 처리하지만, READ TABLE은 특정 조건을 만족하는 한 줄만 딱 골라서 읽고 싶을 때 사용된다.

 

📌 기본 문법

인덱스로 읽기 (가장 빠름)

READ TABLE itab01 INDEX 5.

- 내부테이블 itab01의 5번째 줄을 읽어와서 헤더라인에 넣는다.

- 가장 빠른 방식이다.

- 몇번째 줄에 있는 지 정확하게 알아야한다.

 

키로 읽기 (일반적)

READ TABLE itab01 WITH KEY employee = '1234567'.
  • employee가 '1234567'인 행을 찾아서 헤더 라인에 넣음.
  • 일반적으로는 KEY를 사용해서 찾는 경우가 더 많음.
  • 주의점!*
    • 고유하지 않은 키일 경우, 예를 들어 surname = 'Smith' 같은 경우 → 해당하는 첫 번째 레코드만 읽혀짐. → 나머지 'Smith'들이 있더라도 읽히지 않음.

 

예시

 

READ TABLE itab01 INDEX 3.
" 3번째 행을 읽는다.

READ TABLE itab01 WITH KEY employee = '1234567'.
" employee 필드가 '1234567'인 행을 읽는다.

 

READ TABLE itab01 WITH KEY employee = '1234567'.
IF sy-subrc = 0.
  WRITE: '찾았습니다!'.
ELSE.
  WRITE: '해당 직원 없음!'.
ENDIF.

 

 

- 인덱스는 성능을 위한 빠른 검색이 필요할 때 쓰는 것이다.

- 그에 맞게, 특정 값을 알고 있으면 전체를 반복할 필요없이 빠르게 값을 찾을 수 있디.

 

따란@

 

line_cnt 는 itab01의 테이블을 돌고, 몇 라인이나 있는지 세준다.

총 갯수의 write를 했을 때, cnt는 총  5개 (데이터 들어가있는 값이 5개였다.)

itab01-surname을 출력했을 때는 해당 테이블의 맨 마지막 surname을 추출했다.

맨 마지막 라인에 'po'를 추가하면 내부테이블 안에 쏙 들어간다.

 

 

출력시 위와같이 잘 나오는 것을 알 수 있다.

 

 

surname이 'Ko'인 사람을 'Kooo'로 바꿨고, 내부테이블에서는 변경이 일어난 점을 확인했다.

그런데 zemployees에서는 kooo나, internal table에서 추가한 새로운 'po'도 볼 수 없었는데,

이 이유는 내가 modify [실제 db테이블 ] from [내부테이블] 을 하지 않았기 때문이였다.

 

변경하려고 하니 위와같은 에러가 나왔는데, 

그 이유는 work area or internal table의 타입이 DB테이블의 구조와 정확히 1:1매핑되어있어야하지만,

그렇지 않기 때문이였다.

 

몇가지 work area만 내부테이블에서 가져와서 썼기 때문에 일치하지 않고 호환되지 않기 때문에

inactive로만 된다.

 

해결방법으로는 work area의 타입을 완전히 같게 만들거나 move-corresponding으로 옮기는 방법이 있다.

 

Internal table에서 modify 쓰는 방법

itab01에 대한 정보를 바꾸고 modify해주면 된다

+ Recent posts