주로 발생될 수 있는 원인
1. 데이터 타입의 크기 초과
DATA: lv_amount TYPE p LENGTH 5 DECIMALS 2.
lv_amount = 1234.56. " LENGTH 5 → 총 5자리만 가능, 소수점 2자리 포함 → 최대값 999.99
2. 연산 결과가 허용 범위를 초과
DATA: lv_total TYPE i.
lv_total = 2_000_000_000 + 1_500_000_000. " TYPE I (정수) 최대값 2,147,483,647
3. 잘못된 소수점 정의
DATA: lv_price TYPE p LENGTH 5 DECIMALS 2.
lv_price = 999.99. " 허용됨
lv_price = 1000.00. " 정수부 3자리 필요 → Overflow 발생
4. 내부 테이블/배열 초과
- 설명: 데이터 구조보다 더 많은 데이터를 넣으려고 할 때 발생
- 예시:
- 테이블에 정의된 구조보다 큰 문자열을 넣거나
- CHAR(10) 필드에 15자리 문자열을 넣는 경우
5. 타입 변환 오류
DATA: lv_i TYPE i.
DATA: lv_p TYPE p LENGTH 5 DECIMALS 0.
lv_i = 123456.
lv_p = lv_i. " lv_p 최대값 99999 → Overflow 발생
체크 포인트
- Tcode ST22 (ABAP Short Dump)에서 덤프 상세 확인 → 어떤 필드에서 overflow 났는지 명시됨.
- SE37/SE80에서 해당 RFC, 함수 모듈, 프로그램 확인
- BCD_FIELD_OVERFLOW - SAP RFC 호출 중 ABAP 쪽에서 BCD_FIELD_OVERFLOW 덤프가 난 경우
정리
- 주요 원인:
- 데이터 타입 허용 범위 초과 (LENGTH, DECIMALS)
- 산술 연산 결과가 범위를 넘음
- 타입 변환 시 범위 초과
- 외부 입력 데이터가 범위를 초과
- 예방 방법:
- 데이터 타입 정의 시 최대값 확인
- 연산 전 값 범위 체크
- 입력값 검증