[Oracle] 오라클 테이블 컬럼(Column) 추가, 삭제, 변경 방법(순서 변경)


오라클 데이터베이스는 마이크로소프트의 MS-SQL과 더불어 세계 최고의 점유율을 가진 RDMBS(Relational DataBase Management System, 관계형 데이터베이스) 입니다.

이번 글에서는 테이블 관리의 가장 기본인 오라클 테이블 컬럼(Column) 추가, 삭제, 변경 방법(순서 변경)에 대해 알아보겠습니다.

오라클 테이블의 컬럼을 추가하거나, 삭제하거나, 변경하기 위해서는 ALTER TABLE 구문을 사용하면 됩니다.

[Oracle] 오라클 테이블 컬럼(Column) 추가, 삭제, 변경 방법(순서 변경)

Oracle Table 컬럼(Column) 추가(ADD)

오라클 테이블에 새로운 컬럼을 추가하는 방법입니다.

ALTER TABLE tab_name ADD col_name VARCHAR(10) DEFAULT ‘*’ NOT NULL;

  • tab_name : 컬럼을 추가할 테이블 이름을 입력합니다.
  • col_name : 추가하는 컬럼의 이름을 입력합니다.
  • VARCHAR : 컬럼의 데이터 타입과 길이를 지정합니다.
  • DEFAULT : 기본 값. 생략 가능합니다.(일반적으로 생략함)
    – DEFAULT가 지정된 경우 값이 입력되지 않으면 디폴트 값으로 저장됩니다.
  • NOT NULL : NULL 값 허용 여부.
    – 생략 가능하고, 생략할 경우 NULL 값을 허용합니다.
    – NOT NULL인 경우 반드시 값을 입력해야 저장됩니다.

▶ 실제 사용 예제

  • student 테이블에 email 컬럼을 추가하는 예제입니다.
  • 데이터 타입은 VARCHAR이고, 컬럼 사이즈(길이)는 30자리 입니다.
  • 디폴트 값은 지정하지 않았고, NULL 값을 허용합니다.
–컬럼 추가
ALTER TABLE student ADD email VARCHAR(30);

Oracle Table 컬럼(Column) 변경(MODIFY)

오라클 테이블에서 컬럼의 이름을 변경하거나, 컬럼의 데이터 타입 및 길이를 변경하는 방법입니다.

1. 컬럼의 데이터 타입, 길이 변경

ALTER TABLE tab_name MODIFY col_name VARCHAR2(20);

  • tab_name : 컬럼을 변경할 테이블 이름을 입력합니다.
  • col_name : 변경하는 컬럼의 이름을 입력합니다.
  • VARCHAR2 : 변경되는 컬럼의 데이터 타입과 길이를 지정합니다.

2. 컬럼의 컬럼명 변경

ALTER TABLE tab_name RENAME COLUMN col_name TO new_name;

  • tab_name : 컬럼을 변경할 테이블 이름을 입력합니다.
  • RENAME COLUMN : 컬럼명을 변경할 때 사용하는 구문입니다.
  • col_name : 변경하고자 하는 기존 컬럼의 이름을 입력합니다.
  • new_name : 변경되는 새로운 컬럼의 이름을 입력합니다.

▶ 컬럼을 변경하는 다양한 예제

–데이터 타입 및 크기 변경 : VARCHAR(30) -> VARCHAR2(40)
ALTER TABLE student MODIFY email VARCHAR2(40);
 
–데이터 길이(크기) 변경 : VARCHAR2(40) -> VARCHAR2(50)
ALTER TABLE student MODIFY email VARCHAR2(50);
 
–컬럼명 변경 : email -> e_mail
ALTER TABLE student RENAME COLUMN email TO e_mail;
 
–기본 값 지정
ALTER TABLE student MODIFY email VARCHAR2(50DEFAULT ‘abc@gseek.pe.kr’;
 
–NOT NULL 지정(필수 입력)
ALTER TABLE student MODIFY email VARCHAR2(50NOT NULL;
 
–NOT NULL 제거(NULL 허용)
ALTER TABLE student MODIFY email VARCHAR2(5NULL;
 
Oracle Table 컬럼(Column)을 변경(MODIFY)할 때 주의할 점

1. 컬럼의 데이터 타입을 변경할 때 문자형 타입을 숫자형 타입으로 변경할 수 없습니다.

  • 당연히 문자(String)형 값은 숫자(Number)형 값으로 치환되지 않습니다.
  • 데이터 타입을 변경하기 위한 작업 순서는 다음과 같습니다. (문자형 데이터 타입이지만 실제 값은 모두 숫자만 들어있다는 전제에서 문자형 데이터 타입을 숫자형 데이터 타입으로 변경시 적용 예제)
    1. 임시(Temp) 컬럼을 추가합니다.
      ALTER TABLE student ADD col_temp VARCHAR(10);
    2. 임시 컬럼에 변경할 컬럼의 값을 모두 옮깁니다.
      UPDATE student SET col_temp = column1;
    3. 변경할 컬럼의 데이터(값)을 모두 지웁니다.
      UPDATE student SET colmun1 = NULL;
    4. 변경할 컬럼의 데이터 타입을 변경합니다.
      ALTER TABLE student MODIFY column1 NUMBER(10);
    5. 임시(Temp) 컬럼의 값을 다시 원래 컬럼으로 옮깁니다.
      UPDATE student SET column1 = col_temp;
    6. 임시(Temp) 컬럼을 삭제합니다.
      ALTER TABLE student DROP COLUMN col_temp;

2. 컬럼의 길이(Size)를 줄일 때 오류가 발생할 수 있습니다.

  • 컬럼에 들어 있는 값 중에 변경하려고 하는 컬럼의 길이(Size) 보다 더 큰 값이 하나라도 있는 경우 오류가 발생하면서 변경되지 않습니다.
  • 저장된 컬럼의 데이터 중에 Length가 가장 큰 것을 기준으로 그 이상의 크기로 변경해야 합니다.

Oracle Table 컬럼(Column) 삭제(DROP)

오라클 테이블의 컬럼을 삭제하는 방법입니다. 컬럼 삭제는 무척 간단합니다.

ALTER TABLE tab_name DROP COLUMN col_name;

  • tab_name : 컬럼을 삭제할 테이블 이름을 입력합니다.
  • col_name : 삭제하는 컬럼의 이름을 입력합니다.

▶ 실제 사용 예제

  • student 테이블에 email 컬럼을 삭제하는 예제입니다.
–컬럼 삭제
ALTER TABLE student DROP COLUMN email 

Oracle Table 컬럼(Column) 순서 변경

오라클 테이블에 컬럼을 추가하면 자동으로 맨 마지막에 위치하게 됩니다.

사실 테이블에서 컬럼의 위치는 그다지 중요하지 않습니다. INSERT나 UPDATE할 때 컬럼명을 지정해서 처리하기 때문에 순서와 상관없이 데이터 처리를 할 수 있습니다.

하지만 테이블을 관리하는 입장이나 INSERT 문에서 컬럼을 지정할 수 없는 경우라면 테이블에서 컬럼의 순서도 변경해줘야 할 경우가 생기게 됩니다.

▶ Oracle 12c 이상 인 경우 컬럼 순서 변경 방법

오라클 12c 이상의 버전에서 컬럼의 순서를 변경하고자 할 때는 컬럼의 INVISIBLE, VISIBLE 속성을 사용하면 됩니다.

컬럼의 속성을 INVISIBLE(숨김)로 변경하면 컬럼 순서에서 제외 됩니다. 순서에서 제외된 상태에서 다시 속성을 VISIBLE(보이기)로 변경하면 컬럼의 순서가 맨 마지막 순서로 변경됩니다.

만약 순서가 뒤에 있는 컬럼을 중간이나 앞으로 순서를 옮기기 위해서는 앞의 있는 컬럼을 차례대로 INVISIBLE 한 다음 다시 VISIBLE로 변경하는 작업을 해 주면 됩니다.

▶ Oracle 11g 이하 인 경우 컬럼 순서 변경 방법

아쉽게도 오라클 11g 이하인 경우 컬럼 순서를 변경하기 위해서는 기존 테이블을 삭제하고 다시 제대로 된 순서로 테이블을 생성해 주어야 합니다.

임시 테이블을 만들어 기존 테이블의 데이터를 모두 임시 테이블로 복사하고, 기존 테이블을 삭제 후 다시 생성 후 임시 테이블의 데이터를 다시 새로 만든 기존 테이블에 복사해 주는 방법으로 처리할 수 있습니다.

하지만 데이터가 많은 경우 트랜젝션 처리의 문제가 발생할 수 있으니 깊이 고민해 보고 작업하시길 권합니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기