🚨 ORA-06502: "Numeric or Value Error" 해결 방법
ORA-06502 오류는 PL/SQL 코드에서 **데이터 타입의 크기 제한을 초과하거나 부적절한 연산을 수행할 때** 발생하는 오류입니다. 일반적으로 다음과 같은 경우에 발생합니다.
1. 🔍 ORA-06502 오류의 주요 원인
- ❌ **VARCHAR2, NUMBER 등의 데이터 크기 초과**
- ❌ **숫자 연산에서 값이 너무 크거나 작은 경우**
- ❌ **NULL 값을 연산에 사용한 경우**
- ❌ **타입 변환 오류 (예: 문자열을 숫자로 변환 실패)**
- ❌ **PL/SQL에서 변수 크기가 충분하지 않은 경우**
2. 🛠 ORA-06502 오류 해결 방법
1️⃣ 문자열 크기 초과
변수의 크기보다 더 긴 문자열을 할당하면 오류가 발생합니다.
❌ 오류 예제
DECLARE
my_var VARCHAR2(5);
BEGIN
my_var := 'Hello World'; -- ❌ 5자 제한인데 11자를 저장하려 함
END;
✅ 해결 방법
변수의 크기를 충분히 늘려주거나, 입력되는 문자열을 조절하세요.
DECLARE
my_var VARCHAR2(20); -- ✅ 충분한 크기로 설정
BEGIN
my_var := 'Hello World';
END;
2️⃣ 숫자 연산 오류
숫자 타입의 변수에 너무 큰 값을 할당하면 오류가 발생할 수 있습니다.
❌ 오류 예제
DECLARE
my_num NUMBER(3); -- 최대 999까지 저장 가능
BEGIN
my_num := 1000; -- ❌ 숫자 범위를 초과함
END;
✅ 해결 방법
NUMBER의 크기를 조정하거나, 값이 범위를 초과하지 않도록 검증하세요.
DECLARE
my_num NUMBER(5); -- ✅ 더 큰 범위 설정
BEGIN
my_num := 1000;
END;
3️⃣ NULL 값 연산 오류
NULL 값을 숫자 연산에 사용하면 오류가 발생할 수 있습니다.
❌ 오류 예제
DECLARE
my_num NUMBER;
result NUMBER;
BEGIN
result := my_num + 10; -- ❌ NULL 값과 연산 수행
END;
✅ 해결 방법
NULL 값을 처리하기 위해 NVL 함수를 사용하세요.
DECLARE
my_num NUMBER;
result NUMBER;
BEGIN
result := NVL(my_num, 0) + 10; -- ✅ NULL을 0으로 변환
END;
4️⃣ 타입 변환 오류
문자열을 숫자로 변환할 때 형식이 맞지 않으면 오류가 발생합니다.
❌ 오류 예제
DECLARE
my_num NUMBER;
BEGIN
my_num := TO_NUMBER('ABC'); -- ❌ 숫자로 변환할 수 없는 문자열
END;
✅ 해결 방법
변환 전에 입력 값이 숫자인지 확인하세요.
DECLARE
my_num NUMBER;
BEGIN
my_num := TO_NUMBER('123'); -- ✅ 올바른 숫자 형식
END;
3. 🎯 ORA-06502 오류 방지하는 방법
- ✅ **VARCHAR2, NUMBER 등 데이터 타입의 크기를 충분히 설정**
- ✅ **NVL() 함수로 NULL 값 방지**
- ✅ **TO_NUMBER(), TO_CHAR() 등의 변환 함수 사용 시 올바른 데이터인지 확인**
- ✅ **입력 값 검증을 통해 예상치 못한 데이터 오류 방지**
🎯 결론
ORA-06502 오류는 변수의 크기 제한, 숫자 범위 초과, NULL 값 연산, 타입 변환 문제 등으로 발생합니다. 해결 방법을 적용하여 안전한 PL/SQL 코드를 작성하세요! 😊