💡 전체 개요

  • 프로그램이 단일한 INSERT로 끝나는 게 아니라,
  • 반복(loop)을 통해 여러 개의 데이터를 삽입하거나 수정할 때,
  • 같은 Work Area를 재사용하는 경우가 많음
  • 이때 기존 데이터가 남아있으면 오류가 발생할 수 있으므로, CLEAR를 써서 초기화해줘야함!

🔄 프로그램 흐름

  1. wa_employees에 데이터 채움
  2. INSERT로 DB 테이블에 삽입
  3. SY-SUBRC 체크해서 성공 여부 확인
  4. 그 다음 작업 전 CLEAR wa_employees 실행! → 이전 값들을 날리고 깨끗한 상태로 만들어줌
  5. 다시 새로운 데이터를 넣고 INSERT 시도

🧪 실행 중 에러 발생 예시

  • 같은 키 값(employee = '10000006')으로 두 번 INSERT 시도하면? → SY-SUBRC = 4가 뜸 (에러) → "Record already exists" 느낌의 실패 코드

💡 CLEAR 사용 방식

문장 설명
CLEAR wa_employees. 구조체 전체를 초기화
CLEAR wa_employees-employee. 특정 필드만 초기화

💡 전체 구조체를 초기화하는 걸 추천!


📌 디버그 화면에서 확인한 내용

  • SY-SUBRC = 4일 때, 오류 메시지 출력
  • 이후 CLEAR로 일부 필드를 초기화하고 새로운 값 삽입하면 SY-SUBRC = 0으로 성공
  • 보고서에는 "We have a return code of 4" 또는 "Record Inserted Correctly" 출력

🧼 왜 CLEAR가 중요할까?

  • ABAP은 변수를 재사용할 때 기존 값이 자동으로 초기화되지 않음
  • 예기치 않은 값이 남아있을 수 있음
  • 특히 loop나 반복 insert/update 작업에서는 필수!

✅ 핵심 요약

  • CLEAR는 변수나 구조체의 값 초기화용
  • Work Area를 여러 번 쓰는 경우 반드시 필요함
  • SY-SUBRC 값으로 성공/실패 판단 후 대응 로직 작성!
  • 실습에서는 employee 필드만 초기화했지만, 보통은 CLEAR wa_employees. 처럼 전체 구조체를 비우는 게 안전함

 

✅ CLEAR 문이 필요한 이유 (왜 쓰는가?)

CLEAR는 변수나 구조체(work area)의 값을 초기화
즉, 기존에 있던 값들을 다 지워주는 것!


❓ 그럼 왜 굳이 초기화해야 할까?

📌 1. 이전 값이 남아 있어서 잘못된 데이터가 들어갈 수 있기 때문!

예를 들어서...

 
wa_emp-employee = '1001'. wa_emp-surname = 'KIM'. wa_emp-forename = 'JISOO'. 
INSERT zemployees FROM wa_emp.

 

 

⬇️ 다음 레코드 만들 때...

CLEAR wa_emp-employee. " employee만 초기화 wa_emp-employee = '1002'. 
INSERT zemployees FROM wa_emp.
 
이러면 surname과 forename은 그대로 KIM, JISOO가 남아있음.

➡️ employee = 1002지만 이름은 여전히 JISOO가 들어감 ❗

즉, 예전 값이 덮어써지지 않으면 그 값 그대로 들어가버림 


📌 2. 반복문에서 구조체 재사용할 때 자주 씀

예를 들어 LOOP 돌면서 레코드 계속 INSERT 한다고 하면:

LOOP AT it_data INTO wa_data. CLEAR wa_emp. " 구조체 전체 초기화 => wa_emp-employee = wa_data-id. wa_emp-surname = wa_data-name. 
INSERT zemployees FROM wa_emp. ENDLOOP.

CLEAR 안 하면 이전 루프에서 남은 값들이 계속 따라다님... 🥲


✨ 핵심 요약

상황CLEAR 안 써도 됨?추천?
모든 필드를 직접 덮어씀 O 괜찮음
일부 필드만 변경 X CLEAR 꼭 필요
반복문에서 구조체 재사용 X CLEAR 추천

 


+ Recent posts