오라클 컬럼 변경 방법 (컬럼명, 데이터 타입, 사이즈)
2020-11-08
- 컬럼 데이터 타입 변경
--데이터 타입 변경 : NUMBER(4) -> VARCHAR2(4)
ALTER TABLE emp MODIFY editid VARCHAR2(4);
ALTER TABLE [테이블명] MODIFY [컬럼명] [새로운 데이터타입(길이)]
데이터 타입을 변경해야 하는 경우 해당 컬럼의 값을 모두 지워야 변경이 가능하다.
- 컬럼 길이(크기) 변경
--데이터 길이(크기) 변경 : VARCHAR2(4) -> VARCHAR2(5)
ALTER TABLE emp MODIFY editid VARCHAR2(5);
ALERT TABLE [테이블명] MODIFY [컬럼명] [데이터타입(새로운 길이)]
컬럼 길이를 변경할 경우 변경할 컬럼 길이보다 길이가 긴 값이 있으면 안 된다.
- 컬럼 명 변경
--컬럼명 변경 : editid -> edit_id
ALTER TABLE emp RENAME COLUMN editid TO edit_id
ALERT TABLE [테이블명] RENAME COLUMN [이전 컬럼명] TO [새로운 컬럼명]
- 컬럼 기본 값, NOT NULL 변경
--기본 값 지정
ALTER TABLE emp MODIFY editid VARCHAR2(5) DEFAULT '1000';
--NOT NULL 지정
ALTER TABLE emp MODIFY editid VARCHAR2(5) NOT NULL;
--NOT NULL 제거(변경)
ALTER TABLE emp MODIFY editid VARCHAR2(5) NULL;
--기본 값 + NOT NULL 지정
ALTER TABLE emp MODIFY editid VARCHAR2(5) DEFAULT '1000' NOT NULL;
- 데이터 타입 변경 시 주의사항 컬럼의 데이터 타입을 변경하기 위해서는 해당 컬럼의 값을 모두 지워야 변경이 가능하다.
그렇지 않으면 아래의 오류가 발생한다.
ORA-01439: column to be modified must be empty to change datatype
- 작업순서
- TEMP 컬럼 추가 한다.
-
TEMP 컬럼에 변경할 컬럼의 값을 옮긴다. (UPDATE)
-
변경할 컬럼의 값을 모두 지운다다. (DELETE)
-
컬럼의 데이터 타입을 변경한다.
-
TEMP 컬럼의 값을 원 컬럼으로 옮긴다. (UPDATE)
-
TEMP 컬럼을 삭제 한다.
- 컬럼의 길이 변경(줄일 때) 주의사항 컬럼의 길이를 줄일 경우 해당 컬럼의 값 중 변경할 길이보다 큰 값이 있으면 오류가 발생한다.
ORA-01441: cannot decrease column length because some value is too big
이럴 때는 해당 컬럼의 길이를 조회하여 변경할 길이보다 큰 값이 있는지 확인하고 값을 변경해야 한다.
SELECT *
FROM emp
WHERE length(edit_id) > 4
출처 : https://gent.tistory.com/