[Oracle] 오라클 컬럼 사이즈 변경 방법 완벽 정리: ALTER TABLE MODIFY 실전 가이드
데이터베이스 테이블 구조를 관리하다 보면 기존 테이블의 컬럼 크기를 변경해야 하는 상황이 자주 발생합니다. 특히 오라클(Oracle) 데이터베이스에서는 문자열이나 숫자 타입의 컬럼 크기를 조정할 때 ALTER TABLE MODIFY 구문을 주로 사용합니다. 이 포스팅에서는 오라클에서 컬럼 사이즈를 변경하는 방법, 그리고 변경 시 반드시 주의해야 할 사항들을 예제와 함께 상세하게 설명드리겠습니다.
✅ 이 글은 오라클을 사용하는 DBA 및 개발자, 데이터 분석가 분들이 실무에서 자주 부딪히는 문제를 해결할 수 있도록 구성되었습니다.
✅ 오라클 컬럼 사이즈 변경이 필요한 이유
- 비즈니스 요건 변경: 고객 이름, 주소 등 문자열 컬럼의 길이를 늘려야 할 경우.
- 데이터 정밀도 향상: 금액, 평균값 등을 계산할 때 소수점 자릿수를 늘려야 할 경우.
- DB 설계 오류 수정: 초기 설계 당시 컬럼 사이즈를 너무 작게 설정한 경우.
- 성능 최적화: 불필요하게 큰 컬럼 사이즈를 줄여 저장공간과 처리 효율을 개선.
🛠️ 오라클 컬럼 사이즈 변경 기본 구문
오라클에서 컬럼 사이즈를 변경할 때 사용하는 기본 문법은 다음과 같습니다.
ALTER TABLE [스키마명].[테이블명] MODIFY [컬럼명] [데이터타입(사이즈)];
예시로 자주 사용하는 변경 구문들을 살펴보겠습니다.
문자열 컬럼(VARCHAR2) 사이즈 변경
-- ename 컬럼의 크기를 10 → 50으로 확장
ALTER TABLE emp MODIFY ename VARCHAR2(50);
숫자 컬럼(NUMBER) 사이즈 변경
-- deptno 컬럼의 정수 자릿수 2 → 10으로 확장
ALTER TABLE emp MODIFY deptno NUMBER(10);
소수점을 포함한 숫자(NUMBER(p, s)) 변경
-- sal 컬럼을 정수부 + 소수부 포함하여 7,2 → 10,5로 확장
ALTER TABLE emp MODIFY sal NUMBER(10,5);
🔎 현재 테이블 컬럼 타입과 사이즈 확인 방법
컬럼 사이즈를 변경하기 전, 반드시 현재 데이터 타입과 크기를 확인해야 합니다. 아래 SQL문은 EMP 테이블의 컬럼 정보와 데이터 타입을 확인하는 쿼리입니다.
SELECT table_name,
column_name,
data_type ||
CASE
WHEN data_type LIKE '%CHAR%' THEN '(' || data_length || ')'
WHEN data_type = 'NUMBER' AND data_precision > 0 AND data_scale > 0 THEN '(' || data_precision || ',' || data_scale || ')'
WHEN data_type = 'NUMBER' AND data_precision > 0 THEN '(' || data_precision || ')'
END AS data_type
FROM all_tab_columns
WHERE table_name = 'EMP';
또는 아래처럼 간단하게 DESC 명령으로도 확인할 수 있습니다:
DESC emp;
⚠️ 컬럼 사이즈 변경 시 자주 발생하는 오류 및 해결 방법
컬럼 사이즈를 줄이거나 소수점 자릿수를 조정할 때는 기존 데이터의 제약으로 인해 오류가 발생할 수 있습니다. 아래는 실무에서 자주 마주치는 대표적인 오류 유형과 해결 방법입니다.
❌ ORA-01441: 일부 값이 너무 커서 열 길이를 줄일 수 없음
ALTER TABLE emp MODIFY ename VARCHAR2(5);
오류 메시지:
ORA-01441: cannot decrease column length because some value is too big
원인: ename 컬럼에 이미 길이 5보다 큰 문자열이 존재하는 경우.
해결 방법:
- 변경 전 아래 쿼리로 확인:
SELECT * FROM emp WHERE LENGTH(ename) > 5;
- 데이터를 삭제하거나 줄이거나, 혹은 원하는 사이즈로 필터링된 데이터만 유지.
❌ ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다
ALTER TABLE emp MODIFY sal NUMBER(7,5);
오류 메시지:
ORA-01440: column to be modified must be empty to decrease precision or scale
원인: 기존 컬럼에 데이터가 들어 있는 상태에서 정도(precision)나 소수점 자리수(scale)를 줄일 경우 발생.
해결 방법:
- 해당 컬럼에 데이터가 있는 경우, 데이터를 삭제하거나 백업 후 컬럼 수정.
- 또는 precision을 늘리는 방식으로 구문을 재작성해야 합니다.
예:
-- 전체 자릿수를 10으로 늘리면서 소수점도 5자리로 확장
ALTER TABLE emp MODIFY sal NUMBER(10,5);
💡 실무에서 꼭 기억할 팁
상황 조치
문자열 컬럼 길이 축소 | 반드시 기존 데이터의 길이 확인 (LENGTH 함수 활용) |
NUMBER 컬럼의 소수점 증가 | 전체 자릿수도 함께 늘릴 것 |
컬럼 크기 줄이기 전 | 데이터 백업 필수 |
에러 없이 사이즈 줄이기 | 데이터 삭제 후 시도 또는 임시 테이블 생성 후 마이그레이션 |
🧪 컬럼 사이즈 변경 실습 시나리오
실무에 가장 자주 사용되는 emp 테이블을 기준으로 간단한 실습 시나리오를 구성해 보겠습니다.
- 현재 컬럼 정보 조회:
DESC emp;
- ename 컬럼을 VARCHAR2(50)으로 확장:
ALTER TABLE emp MODIFY ename VARCHAR2(50);
- sal 컬럼 소수점 확장 전 확인:
SELECT MAX(sal), LENGTH(TRUNC(sal)) FROM emp;
- 정수부 고려한 확장 적용:
ALTER TABLE emp MODIFY sal NUMBER(10,5);
- 컬럼 축소 전 데이터 확인:
SELECT * FROM emp WHERE LENGTH(ename) > 5;
🔚 마무리: 오라클 컬럼 사이즈 변경, 실수 없이 하는 법
오라클에서 ALTER TABLE MODIFY 명령은 매우 강력한 기능이지만, 데이터 무결성과 기존 데이터 제약을 반드시 고려해야 합니다. 사이즈를 변경하기 전에 충분한 확인 과정을 거치고, 에러 메시지를 정확히 해석하며 대응하는 것이 중요합니다.
👨💻 실무에서는 컬럼 크기 변경 후, 인덱스/제약조건/애플리케이션 로직의 영향도 분석까지 꼭 수행하시길 권장합니다.