본문 바로가기

Oracle/admin

컬럼 관리

Column을 변경하는 것은 많은 문제점을 초래할수 있다.
일례로 많은 SQL문 중에 해당 Column이 쓰이고 있는데 변경을 하게되면
해당 SQL문은 모두 error를 return 할 것이다.
신중히 사전,사후 검토가 필요할 것이다.



 

1. 컬럼 속성 변경
ALTER TABLE 테이블명 MODIFY (컬럼명 속성명); 

ex>
SQL> create table test (aaa number(4,2),bbb varchar2(5));
테이블이 생성되었습니다.
SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- -------------
 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(5)

SQL> insert into test values(12.34,'abcde');
1 개의 행이 만들어졌습니다.
SQL> select * from test;
       AAA BBB
---------- -----
     12.34 abcde

SQL> alter table test modify (aaa number(3,2));
alter table test modify (aaa number(3,2))
                         *
1행에 오류:
ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다
SQL> alter table test modify (bbb varchar2(4));
alter table test modify (bbb varchar2(4))
                         *
1행에 오류:
ORA-01441: 일부 값이 너무 커서 열 길이를 줄일 수 없음

SQL> alter table test modify (aaa number(4,2));
테이블이 변경되었습니다.
SQL> alter table test modify (bbb varchar2(10));
테이블이 변경되었습니다.
SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- --------------
 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
SQL> select * from test;
       AAA BBB
---------- ----------
     12.34 abcde

==> 기존에 있던 컬럼의 속성 크기보다 작게는 변경이 불가하다. 단 변경하려면 해당 컬럼에 데이터를 모두 지운후에는 변경이 가능하다. 또한 속성을 다른게 변경하는것도 데이터를 모두 지운후에 가능하다.


 

2. 컬럼 추가

ALTER TABLE 테이블명 ADD (컬럼명 속성명); 

ex>
SQL> alter table test add (ddd number(3));

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ---------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
 DDD                                                NUMBER(3)


 

3. 컬럼명 변경

ALTER TABLE 테이블명 RENAME COLUMN old_컬럼명 TO new_컬럼명;

ex>
SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- -----------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10
 DDD                                                NUMBER(3)

SQL> alter table test rename column ddd to ccc;

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ---------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
 CCC                                                NUMBER(3)




 

4. 컬럼 삭제(oracle 8i이후부터 가능)

ALTER TABLE 테이블명 DROP ( 컬럼명 );

ex>
SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
 CCC                                                NUMBER(3)

SQL> alter table test drop (ccc);

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)


 

5.제약조건 삭제 및 설정

삭제 : ALTER TABLE 테이블명 DROP PRIMARY KEY;
설정 : ALTER TABLE 테이블명 ADD PRIMARY KEY(컬럼명);

ex>
SQL> select * from test;

선택된 레코드가 없습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ------------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)

SQL> alter table test add(ccc number primary key);    <---CCC 컬럼 primary key 지정해서 추가

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ------------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
 CCC                                       NOT NULL NUMBER              <-----primary key

SQL> alter table test drop primary key;    <----뒤에 cascade 옵션 사용가능

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
 CCC                                       NOT NULL NUMBER          <---primary key 해제되고 not null조건은 남아있는 상태

다시 CCC컬럼을 primary key로 지정하려면

SQL> alter table test add primary key(ccc);

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------

 AAA                                                NUMBER(4,2)
 BBB                                                VARCHAR2(10)
 CCC                                       NOT NULL NUMBER


 

'Oracle > admin' 카테고리의 다른 글

nls_char ,spfile 위치 확인  (0) 2015.09.14
DB Buffer cache, Shared Pool 초기화  (0) 2015.09.14
Control file 재생성  (0) 2015.09.14
SQL TRACE ,tkprof  (0) 2015.09.14
Tuning 참고  (0) 2015.09.14