오라클 컬럼 변경 방법 (컬럼명, 데이터 타입, 사이즈)

2020-11-08

9876546

  • 컬럼 데이터 타입 변경
--데이터 타입 변경 : 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

  • 작업순서
    1. TEMP 컬럼 추가 한다.
  1. TEMP 컬럼에 변경할 컬럼의 값을 옮긴다. (UPDATE)

  2. 변경할 컬럼의 값을 모두 지운다다. (DELETE)

  3. 컬럼의 데이터 타입을 변경한다.

  4. TEMP 컬럼의 값을 원 컬럼으로 옮긴다. (UPDATE)

  5. 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/