오라클 데이터베이스에서 칼럼의 사이즈를 늘리거나 칼럼의 사이즈를 줄일 때는 ALTER TABLE MODIFY 명령을 사용하면 된다. 그러나 기존 데이터의 크기가 줄이려는 사이즈보다 큰 경우 오류가 발생할 수 있으며, 숫자(NUMBER) 칼럼의 소수점 길이를 늘일 때는 전체 길이도 함께 늘려야 정수부가 줄어들면서 발생하는 오류를 방지할 수 있다.
칼럼 |
컬럼 사이즈 변경 방법
-- 문자열: VARCHAR2(10) -> VARCHAR2(50)
ALTER TABLE emp MODIFY ename VARCHAR2(50);
-- 숫자: NUMBER(2) -> NUMBER(10)
ALTER TABLE emp MODIFY deptno NUMBER(10);
-- 소수점을 포함한 숫자: NUMBER(7,2) -> NUMBER(10,5);
ALTER TABLE emp MODIFY sal NUMBER(10,5);
ALTER TABLE [스키마명].[테이블명] MODIFY [컬럼명] [데이터타입(사이즈)]
위의 구문을 사용하여 칼럼 사이즈를 변경할 수 있다.
테이블 컬럼 데이터 타입, 사이즈 조회
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 data_type
FROM all_tab_columns
WHERE table_name = 'EMP'
위의 쿼리문 외에도 DESC [테이블명] 명령을 사용하면 테이블 정보를 조회할 수 있다.(예, DESC emp )
컬럼 사이즈 변경 시 주의 사항
ALTER TABLE emp MODIFY ename VARCHAR2(5) 오류 보고 - ORA-01441: 일부 값이 너무 커서 열 길이를 줄일 수 없음 01441. 00000 - "cannot decrease column length because some value is too big" |
위의 오류는 칼럼에 입력되어 있는 데이터 사이즈가 줄이려고 하는 사이즈 보다 큰 데이터가 존재할 경우 발생한다
SELECT *
FROM emp
WHERE LENGTH(ename) > 5
칼럼에 입력된 데이터 사이즈를 미리 확인 후 칼럼 사이즈를 변경하는 것이 좋다.
ALTER TABLE emp MODIFY sal NUMBER(7,5) 오류 보고 - ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다 01440. 00000 - "column to be modified must be empty to decrease precision or scale" |
위의 오류는 소수점 사이즈를 늘릴 때 주로 발생할 수 있는 오류이다.
소수점 길이를 늘 릴경우 정수부 길이가 줄어들기 때문에, 이미 입력된 정부수 사이즈가 큰 데이터가 존재하면 오류가 발생한다. 숫자 칼럼의 소수점 사이즈를 늘릴 때는 전체 길이도 같이 늘려주는 것이 좋다.