Oracle과 SQLServer DBMS에서 제공하는 테이블 명을 변경 또는 칼럼을 추가하거나 수정 삭제하는 방법입니다. 해당 주제에 대해서 잘못된 정보 또는 추가적인 정보가 있을 시 댓글로 남겨주시면 감사하겠습니다.
목차
테이블 명 변경하기
기존 테이블의 명을 다른 테이블로 변경하는 것입니다. 실제 사용 중인 테이블 명을 변경할 때에는 신중한 검토가 필요합니다. 기존의 쿼리, 뷰, 사용자 정의 함수, 저장 프로시저 또는 애플리케이션에서 해당 테이블을 참조하는 경우에 테이블을 참조하는 개체들도 함께 수정해주어야 합니다. 아래 예시들은 테이블명 ORD_NAME이 기존이름이며 변경할 이름은 NEW_NAME입니다.
Oracle / ANSI 표준 : RENAME
RENAME ORD_NAME TO NEW_NAME;
SQL Server : sp_rename
EXEC sp_rename 'ORD_NAME' , 'NEW_NAME';
Oracle : ALTER RENAME
ALTER TABLE ORD_NAME RENAME TO NEW_NAME;
테이블 칼럼 추가/수정/삭제/명 변경
테이블을 생성한 이후에 DDL 명령어 ALTER 과 sp_rename을 사용하여 칼럼명을 변경하거나 칼럼 추가/수정삭제하는 SQL 명령어입니다. 테이블 칼럼이 수정되어도 테이블 변경과 마찬가지로 참조하고 있는 프로시저 또는 프로그램에서의 검토가 필요합니다. Oracle에서는 테이블 칼럼이 수정/삭제/추가되면 프로시저, 함수 등 Object에서 INVALID 상태로 빠지게 되어 Recomplie 또는 Rebuild를 해주어야 정상적으로 사용가능합니다. SQL Server에서는 자동으로 다시 컴파일하여 따로 처리하지 않아도 문제가 생기지 않습니다.
테이블 칼럼 추가
테이블 칼럼을 추가하게 되면 맨 마지막에 삽입이 되며 위치를 변경할 수 없습니다. Oracle에서는 12C 버전부터는 Column Invisible 기능을 사용하여 원하는 위치에 추가할 수 있으며 SQL Server는 임시테이블로 데이터를 옮긴 뒤 본 테이블을 신규 생성하고 데이터를 재이관하는 방법으로 칼럼 위치를 수정합니다.
테이블 명은 TABLE_NAME, 신규컬럼이름을 new_col이며 문자열 타입 크기는 가변으로 30자리로 가정합니다.
Oracle : ALTER TALBE ADD
ALTER TABLE TABLE_NAME ADD (new_col VARCHAR2(30));
SQL Server : ALTER TABLE ADD
ALTER TABLE TABLE_NAME ADD new_col VARCHAR(30);
테이블 칼럼 수정
테이블 컬럼을 수정할 때 주의할 부분은 기존 데이터 타입의 크기보다 작게는 변경할 수 없습니다. 하지만 칼럼이 NULL 값만 가지고 있거나 테이블이 비어있다면 칼럼의 크기를 줄일 수 있습니다. 칼럼이 NULL 값만 가지고 있다면 데이터 유형을 변경할 수도 있습니다. 칼럼에 DEFAULT 제약조건의 값을 바꾸면 변경 작업 이후에 발생하는 행에 대해서만 영향을 미치게 됩니다. 해당 칼럼에 NULL 값이 없는 경우에만 NOT NULL 제약조건을 추가할 수 있습니다. Oracle에서는 한 테이블에 여러 칼럼을 변경할 때 콤마(,)로 구분하여 한 문장에 사용이 가능하며 SQL Server에서는 한 문장에 사용이 안되어 여러 문장을 사용하여 변경해야 합니다.
테이블 명은 TABLE_NAME으로 하며 name_col 칼럼의 문자열 타입의 크기를 10에서 30으로 변경합니다. 다른 제약조건은 NOT NULL이 있으며 변경 후에도 유지되어야 한다. num_col 칼럼은 속성은 그대로이며 DEFAULT 제약조건을 추가합니다. ( 타입은 DBMS에 따라 INT, NUBER, NUBERIC 등으로 변경될 수 있습니다 )
변경전 | 변경후 | ||||
TABLE_NAME | TABLE_NAME | ||||
name_col | varchar(10) | NOT NULL | name_col | varchar(30) | NOT NULL |
num_col | int(1) | num_col | int(1) | DEFALULT('1') |
Oracle : ALTER TABLE MODIFY
ALTER TABLE TABLE_NAME MODIFY(name_col varchar2(30) NOT NULL, num_col NUMBER(1,0) DEFAULT(1));
SQL SERVER : ALTER TABLE ALTER COLUMN
ALTER TABLE TABLE_NAME ALTER COLUMN name_col VARCHAR(30) NOT NULL;
--ADD CONSTRAINT 제약조건명 제약조건 FOR 컬럼명
ALTER TABLE TABLE_NAME ADD CONSTRAINT df_num_col DEFAULT 1 FOR num_col;
테이블 칼럼 삭제
한 번에 하나의 칼럼만 삭제 가능하며 삭제 후 복구는 불가능하므로 작업 시 유의하셔야 합니다. Oracle과 SQL Server 명령이 동일합니다.
- 테이블 명은 TABLE_NAME이며 삭제할 칼럼 명은 old_col로 가정합니다.
Oracle/ SQL Server : ALTER TABLE DROP COLUMN
ALTER TABLE TABLE_NAME DROP COLUMN num_col;
칼럼명 변경
TABLE_NAME 테이블의 ord_col 칼럼명을 new_col 칼럼명으로 변경한다고 가정합니다.
Oracle : ALTER TALBE RENAME
ALTER TALBE TABLE_NAME RENAME COLUMN ord_col TO new_col;
SQL Server : sp_rename
EXEC sp_rename 'TABLE_NAME.ord_col', 'new_col'. 'COLUMN';
'IT경험공유 > DataBase' 카테고리의 다른 글
DB/SQL-고급집계함수 ROLLUP, GROUPING SETS, CUBE (0) | 2023.03.14 |
---|---|
[DB/SQL] 윈도우 함수 LEAD/LAG (Feat. Partition by ) (0) | 2023.03.13 |
[DB/SQL] 조인(JOIN) 사용법 INNER/OUTER/CROSS (0) | 2023.03.11 |
[DB/ORACLE/MSSQL(SQLSERVER)] NULL의 이해 (NVL,NVL2,NULLIF,COALESCE) (0) | 2023.03.10 |
[DB] 국가공인자격증 SQLD (0) | 2023.03.06 |
댓글