오라클 테이블에 컬럼을 추가하기 위해서는 ALTER TABLE을 사용한다. 컬럼을 추가하면 테이블 컬럼의 마지막 순서에 추가가 되며, 컬럼 순서의 중간에 컬럼을 추가할 수는 없다.
오라클 12c 부터는 조금 쉽게 컬럼의 순서를 변경할 수 있도록 기능이 추가 되었으며, 이전 버전에서 컬럼 순서를 변경하기 위해서는 테이블을 재생성 해야 한다.
컬럼 추가, 삭제
--컬럼 추가 1
ALTER TABLE emp ADD email VARCHAR(25);
--컬럼 추가 2 (기본 값, NOT NULL 지정)
ALTER TABLE emp ADD email VARCHAR(25) DEFAULT 'test@test.com' NOT NULL;
--컬럼 삭제
ALTER TABLE emp DROP COLUMN email;
컬럼 순서 변경 (오라클 12c 이상)
오라클 12c 이상의 버전에서 컬럼 순서를 변경할 때는 컬럼의 INVISIBLE, VISIBLE 속성을 사용하면 된다.
컬럼을 INVISIBLE(숨김)으로 변경 후 다시 VISIBLE(보이기)로 변경하면 컬럼의 순서가 마지막으로 변경된다. 순서를 변경할 앞의 컬럼을 모두 INVISIBLE로 변경 후 다시 VISIBLE로 변경하면 해당 컬럼이 순서가 앞으로 이동된다.
EMAIL 컬럼의 순서를 ENAME 뒤로 변경하기 위해서는 중간의 컬럼 JOB~DEPTNO 컬럼을 숨겼다가 다시 보이도록 하면된다.
--컬럼 숨김
ALTER TABLE emp MODIFY job INVISIBLE;
ALTER TABLE emp MODIFY mgr INVISIBLE;
ALTER TABLE emp MODIFY hiredate INVISIBLE;
ALTER TABLE emp MODIFY sal INVISIBLE;
ALTER TABLE emp MODIFY comm INVISIBLE;
ALTER TABLE emp MODIFY deptno INVISIBLE;
--컬럼 보이기
ALTER TABLE emp MODIFY job VISIBLE;
ALTER TABLE emp MODIFY mgr VISIBLE;
ALTER TABLE emp MODIFY hiredate VISIBLE;
ALTER TABLE emp MODIFY sal VISIBLE;
ALTER TABLE emp MODIFY comm VISIBLE;
ALTER TABLE emp MODIFY deptno VISIBLE;
컬럼 순서 변경 (오라클 11g 이하)
오라클 11g 이하 버전에서 컬럼의 순서를 바꾸기 위해서는 기존 테이블을 삭제하고 다시 생성해야 한다. 테이블의 데이터가 많이 쌓여있고 사용하는 곳이 많다면 테이블을 삭제하는 것은 어려운 일이다. 대부분 컬럼 순서 변경이 꼭 필요한 경우만 작업을 하고 그 외는 마지막에 컬럼을 추가하는 편이다.
아래는 예제는 emp 테이블에서 변경 할 컬럼의 순서로 조회 후 emp_temp 테이블을 생성하는 방법이다.
--변경할 컬럼 순서로 조회 후 테이블 생성
CREATE TABLE emp_temp AS
SELECT empno
, ename
, email
, job
, mgr
, hiredate
, sal
, comm
, deptno
FROM emp;
--기존 테이블 삭제
DROP TABLE emp;
--TEMP 테이블명 변경 (emp_temp -> emp)
RENAME emp_temp TO emp;
테이블 삭제(DROP) 시 PK, INDEX, 제약조건 등 함께 삭제가 되니, 꼭 백업 후 재생성을 해야한다.
VIEW, SYNONYM, STORED PROCEDURE, FUNCTION, TRIGGER 등은 삭제되지 않는다.