본문 바로가기

개발

[Oracle] CLOB 데이터 REPLACE 함수 이용해서 바꾸기

CLOB (Character Large Object)는 데이터베이스 관리 시스템에 쓰이는 문자 데이터의 모임으로, 테이블 자체에서 참조되는 별도 위치에 보통 저장된다. IBM DB2와 오라클, 티베로는 CLOB이라는 이름의 구성체를 제공하고 있으며, 다른 데이터베이스 시스템 다수는 text, memo, long character 필드와 같은 비슷한 개념을 지원하고 있다. (출처: 위키백과)

 

데이터베이스로 오라클을 사용하다 보면 저장해야 할 텍스트의 길이 긴 데이터들이 생기곤 합니다. 텍스트를 저장할 데이터 타입으로 VARCHAR2가 있지만 최대 4,000 byte까지만 지원을 하다 보니 어쩔 수 없이 데이터 타입 CLOB을 사용하게 됩니다.

 

시스템을 운영하다보면 대부분 수정 화면을 만들어 화면 단에서 수정을 해주지만 피치 못할 사정으로 직접 CLOB 데이터에 대한 수정이 필요할 경우 발생합니다.

 

CLOB 컬럼의 입력된 데이터가 4,000 byte가 넘지 않는 때와 4,000 byte가 넘는 경우, 두 가지 경우에 따라 다음과 같이 처리할 수 있습니다.

 

CLOB 컬럼의 데이터가 4,000 byte가 넘지 않는 경우 
UPDATE 테이블명
   SET TO_CLOB(REPLACE(TO_CHAR(CLOB 컬럼명, '대상 텍스트', '바꿀 텍스트'))
 WHERE 조건;

 

CLOB 컬럼의 데이터가 4,000 byte가 넘는 경우
UPDATE 테이블명
   SET REGEXP_REPLACE(CLOB 컬럼명, '대상 텍스트', '바꿀 텍스트')
 WHERE 조건;

 

추가로 REGEXP_REPLACE() 함수의 경우 정규 표현식을 사용할 수 있기 때문에 HTML, XML 태그가 들어가 있는 데이터를 변환할 때에 유용합니다.

 


시스템 운영을 하다 보면 운영자가 직접 DB에 접근해서 수정하는 것을 지양해야 하지만 꼭 이렇게 수정을 해줘야 하는 경우가 발생합니다. 이런 일이 종종 발생한다면 운영자 화면을 하나 만들어 직접 DB에 접근하여 수정하는 일이 없도록 해야겠지요~ ^^

728x90