개발일지

[Oracle] Varchar2 에서 CLOB으로 DB 컬럼 변경/수정하기

남잭슨 2017. 7. 13. 14:56


 [ Cobook ] 프로젝트를 진행하다가 , 게시판형식의 리뷰게시판을 개발하다 보니 ,


아래와같은 에러가 발생하였다!

java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column



에러를 보니, Oracle DB에 Insert 하는데 데이터가 너무 길었기 때문이다.

Contents라는 컬럼타입이 Varchar2 (4000) 으로 되어있었다!

Varchar2의 크기는 4000 Byte가 최대이기때문에, Varchar2의 크기를 더이상 늘려주지못한다!

(

만약 4000 이하의 크기를 사용하려면

ALTER TABLE 테이블명 MODIFY(컬럼명 VARCHAR2(데이터크기));

를 입력하여 실행시켜주면 된다!

)


하지만 나는 4000이상의 큰 데이터를 입력할것이기때문에 데이터타입을 CLOB으로 변경 시켜줘야한다!



일단 그냥 DB를 수정해보자!


ALTER TABLE BOOKREVIEW MODIFY(CONTENTS CLOB);


당연하게도? 에러가 난다!










Varchar2 에서 CLOB으로 데이터타입을 직접적으로는 바꿀수는 없다!

하지만 , 생각의 전환으로 간단하게 바꿀수 있다.


1.  해당 테이블에 새로운 CLOB 컬럼을 추가한다.

2.  기존의 컬럼을 새로운 CLOB 컬럼에 복사한다.

3.  기본의 컬럼을 삭제한다.

4.  새로운 컬럼의 이름을 기존컬럼의 이름으로 변경시켜준다.


ALTER TABLE [테이블명] ADD ([임시컬럼명] CLOB);                                     -- CLOB형으로 [임시컬럼명] 을 추가
UPDATE [테이블명]SET [임시컬럼명] = [기존컬럼명];                                  -- [임시컬럼] 에 [기존컬럼]에 있던 값을 복사
ALTER TABLE [테이블명] DROP COLUMN [기존컬럼명];                                -- [기존컬럼]을 삭제
ALTER TABLE [테이블명] RENAME COLUMN [임시컬럼명] TO [기존컬럼명];       -- [임시컬럼명]을 [기존컬럼명]으로 바꾼다.