ORA-12899: 열에 대한 값이 너무 큼 (ORA-12899: value too large for column)

데이터를 인서트하거나 업데이트할 때 '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: 열에 대한 값이 너무 큼' 오류를 수정할 수 있습니다.

댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗