wrkbrs

[Oracle] ORACLE 컬럼 데이터 유형 바꾸기( ADD, MODIFY, RENAME, DROP ) 본문

Oracle

[Oracle] ORACLE 컬럼 데이터 유형 바꾸기( ADD, MODIFY, RENAME, DROP )

zcarc 2018. 11. 13. 11:11

1. 임시로 사용할 테이블 생성하기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 테이블 생성
 
CREATE TABLE MY_DUAL AS(
    SELECT 1 ID, 2000 SALARY FROM DUAL UNION ALL
    SELECT 2 ID, 2200 SALARY FROM DUAL UNION ALL
    SELECT 3 ID, 2400 SALARY FROM DUAL UNION ALL
    SELECT 4 ID, 2600 SALARY FROM DUAL UNION ALL
    SELECT 5 ID, 2800 SALARY FROM DUAL UNION ALL
    SELECT 6 ID, 2600 SALARY FROM DUAL UNION ALL
    SELECT 7 ID, 3000 SALARY FROM DUAL UNION ALL
    SELECT 8 ID, 2600 SALARY FROM DUAL
);
 
-- 기존 테이블 컬럼만 복사해 새 테이블 생성
 
CREATE TABLE COPY_NEW_TABLE AS(
    SELECT * FROM EXIST_TABLE_NAME
    WHERE 1=2 -- FALSE
);



2. 컬럼 ADD, MODIFY, RENAME, DROP 사용하기 - 1



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- 1. 컬럼 ADD
-- ALTER TABLE 테이블명 ADD 새 컬럼명 이름  데이터타입;
 
ALTER TABLE MY_DUAL ADD ANNUAL_INCOME VARCHAR2(1000);
UPDATE MY_DUAL SET ANNUAL_INCOME = SALARY;
 
-- 2. 컬럼 MODIFY
-- ALTER TABLE 테이블 명 MODIFY 컬럼명 데이터타입;
 
ALTER TABLE MY_DUAL MODIFY SALARY VARCHAR2(1000);
 
-- 3. 컬럼 RENAME
-- ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;
 
ALTER TABLE MY_DUAL RENAME COLUMN ANNUAL_INCOME TO SALARY;
 
-- 4. 컬럼 DROP
-- ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;
 
ALTER TABLE MY_DUAL DROP COLUMN SALARY;



3. 컬럼에 데이터가 있을때 데이터 유형 바꾸는 방법 - 2



1
2
3
4
5
6
7
8
9
10
11
12
13
-- 컬럼에 데이터가 있을때 데이터 유형 바꾸는 방법
 
-- 1. 새 이름으로 새 컬럼을 하나 생성 (ADD)
ALTER TABLE MY_DUAL ADD ANNUAL_INCOME VARCHAR2(1000);
 
-- 2. 새 컬럼에 기존 데이터를 다시 입력 (SET)
UPDATE MY_DUAL SET ANNUAL_INCOME = SALARY;
 
-- 3. 기존 컬럼 삭제 (DROP)
ALTER TABLE MY_DUAL DROP COLUMN SALARY;
 
-- 4. 새 컬럼의 이름을 기존 컬럼 이름으로 바꿈 (RENAME)
ALTER TABLE MY_DUAL RENAME COLUMN ANNUAL_INCOME TO SALARY;



현재 SALARY 컬럼의 데이터 유형은 NUMBER 

SALARY 컬럼은 데이터를 갖고 있다.

데이터를 가지고있는 컬럼에 대한 데이터유형 변경은 허용하지 않는다.


그러므로 새 이름의 필요한 데이터유형의 새로운 컬럼을 하나 생성한 뒤 

기존 컬럼이 가지고 있는 데이터를 새로운 데이터유형의 컬럼에 넣어주고(이동)

기존 컬럼을 삭제(DROP) 하고 새 이름의 새컬럼 이름을 기존 컬럼의 이름으로 바꿔주면 된다.




https://shlee0882.tistory.com/54