SQL

[SQL] DDL - ALTER 칼럼명 변경, 칼럼 크기(타입) 변경

hjkongkong 2025. 7. 14. 14:30

1. 칼럼명 변경 RENAME

CLOUMN2를 COLUMN2로 바꾸고자한다

ALTER TABLE 테이블명 RENAME COLUMN 변경전칼럼명 TO 변경후칼럼명;

 

CHAR으로 선언해서 LEN1이 10

 

2. 칼럼 크기(타입) 변경 MODIFY

ALTER TABLE 테이블명 MODIFY 크기를변경할칼럼명 VARCHAR(9);

 

만일 기존에 COL2에 VARCHAR(9)보다 큰 값이 있었다면 오류가난다.

단, 데이터 타입을 바꾸고자 할 때는 해당 칼럼의 값을 모두 비우고 바꿔야한다. 

/* ALTER 오류 예시 */
CREATE TABLE EX2_10 (
    COL1        VARCHAR(10) NOT NULL,
    COL2        VARCHAR(10) NULL,
    CREATE_DATE DATE DEFAULT SYSDATE
);

INSERT INTO EX2_10 (COL1) VALUES(12);
SELECT * FROM EX2_10;

ALTER TABLE EX2_10 RENAME COLUMN COL1 TO COL11; 
ALTER TABLE EX2_10 MODIFY COL11 VARCHAR(11);

-- ORA-01441: 일부 값이 너무 커서 열 길이를 줄일 수 없음
ALTER TABLE EX2_10 MODIFY COL11 VARCHAR(1);
-- 어떤 레코드 때문인지 확인
SELECT * FROM EX2_10 WHERE LENGTH(COL11) > 1;

-- ORA-01439: 데이터 유형을 변경할 열은 비어 있어야 합니다
ALTER TABLE EX2_10 MODIFY COL11 DATE; -- 형변환

 

3. 디폴트 값 지정, NOT NULL 지정

--디폴트 값 지정
ALTER TABLE 테이블명 MODIFY 변경할칼럼명 VARCHAR(9) DEFAULT '1';

--NOT NULL 지정
ALTER TABLE 테이블명 MODIFY 변경할칼럼명 VARCHAR(9) NOT NULL;

 

4. 칼럼 추가

ALTER TABLE EX2_10 ADD COL3 NUMBER;
ALTER TABLE EX2_10 ADD COL_TIME TIMESTAMP DEFAULT SYSTIMESTAMP;
DESC EX2_10;

 

5. 칼럼 삭제

ALTER TABLE EX2_10 DROP COLUMN COL3;


그렇다면...

DEFAULT 설정을 사후(?)에 할 수 있을까?

ALTER TABLE EX2_10 ADD COL4 VARCHAR(10);
INSERT INTO EX2_10 (COL11) VALUES(500); -- DEFAULT 설정 전 행 레코드 삽입
SELECT * FROM EX2_10;

ALTER TABLE EX2_10 MODIFY COL4 DEFAULT 1;
INSERT INTO EX2_10 (COL11) VALUES(501);
SELECT * FROM EX2_10;

된다.

 

그렇다면 NOT NULL은 사후에할 수 있을까?

이건 안된다. COL4에 NULL값이 존재하기 때문

그렇다면 COL4의 값에 NULL 값이 없다면?

-- 그럼 COL4를 다 NULL값이 아닌 값으로 바꿔도 안될까?
UPDATE EX2_10
   SET COL4 = 100
 WHERE COL4 IS NULL;
 SELECT * FROM EX2_10;
 
 ALTER TABLE EX2_10 MODIFY COL4 NOT NULL; -- 된다.
 DESC EX2_10;

COL4 NN

 

반응형

'SQL' 카테고리의 다른 글

[SQL] PRIMARY KEY  (0) 2025.07.14
[SQL] CONSTRAINTS (제약조건)  (1) 2025.07.14
[SQL] 특정 개수의 값 출력 - ROWNUM, TOP, LIMIT  (0) 2025.07.14
[ORACLE] 예약어  (0) 2025.07.14
[SQL Developer] 설치 및 사용  (2) 2025.07.14