데이터를 인서트하거나 업데이트할 때 'ORA-12899: 값이 너무 큼 오류'가 발생할 수 있습니다. 이 오류는 컬럼의 데이터 길이가 정의된 최대 길이를 초과했을 때 발생합니다. 😊 EMP 테이블을 예시로 사용하여 이 오류의 원인과 해결 방법에 대해 알아 보아요.
ORA-12899: 열에 대한 값이 너무 큼. 원인
이 오류는 열에 대한 값의 길이가 열 정의에서 허용된 길이를 초과했을 때 발생합니다.
오라클에서 기본적으로 제공하는 테스트 테이블, {EMP} 테이블을 활용해보겠습니다. 먼저 {EMP} 테이블의 구조를 확인해봅니다. 예를 들어, [ENAME] 열이 VARCHAR2(10)으로 정의되어 있다고 가정합니다.
Name Null? Type
---------- -------- --------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
잘못된 쿼리 예시, 너무 긴 값 삽입
[ENAME] 컬럼에 너무 긴 문자열을 삽입하려고 할 때에 오류가 발생하는 예제입니다. 다음 쿼리는 [ENAME] 컬럼에 정의된 최대 길이(10)를 초과하는 문자열('THISISAVERYLONGNAME')을 삽입하려고 하기 때문에 오류가 발생할 거예요.
INSERT INTO EMP (EMPNO, ENAME, JOB, DEPTNO) VALUES (9999, 'THISISAVERYLONGNAME', 'CLERK', 10);
ERROR at line 1:
ORA-12899: value too large for column "USER_NAME"."EMP"."ENAME" (actual: 19, maximum: 10)
오류 해결 방법
컬럼에 정의된 최대 길이를 초과하지 않도록 값을 조정하거나, 컬럼의 최대 길이를 증가시키는 방향을 검토합니다. 컬럼 길이 확장은, 충분히 고려 후 진행해 주세요. 이미 설계가 되어 있는 테이블 정의에 대해 임의로 확장하는 작업을 독단으로 하는 것은 확인이 필요한 작업이랍니다. 신입 개발자가 자주 실수하는 부분! 😭
해결 방법 1: 값을 줄임
[ENAME] 컬럼에 최대 길이 이하의 값을 삽입합니다. 프로그래밍 방식으로 스트링을 자르는 방법도 고려할 수 있겠죠? 다음 쿼리는 [ENAME] 컬럼에 최대 길이 이하의 문자열('SHORTNAME')을 삽입하여 오류를 피할 수 있습니다.
INSERT INTO EMP (EMPNO, ENAME, JOB, DEPTNO) VALUES (9999, 'SHORTNAME', 'CLERK', 10);
1 row created.
해결 방법 2: 컬럼의 길이 증가
ALTER TABLE 구문을 사용하여 [ENAME] 컬럼의 길이를 증가시키는 방법이에요. 데이터 정의어이므로 적용 시 신중해 주세요. 다음 방법은 [ENAME] 컬럼의 최대 길이를 증가시켜 긴 문자열도 허용되도록 합니다.
-- 신중히 검토 필요
ALTER TABLE EMP MODIFY (ENAME VARCHAR2(20));
Table altered.
-- 이제 긴 문자열도 인서트 가능
INSERT INTO EMP (EMPNO, ENAME, JOB, DEPTNO) VALUES (9999, 'THISISAVERYLONGNAME', 'CLERK', 10);
1 row created.
이와 같이, SQL 구문에서 컬럼에 입력하려는 값의 길이를 확인하여 (필요할 경우 컬럼의 정의를 수정) 'ORA-12899: 열에 대한 값이 너무 큼' 오류를 수정할 수 있습니다.
