long형 replace

2011. 1. 24. 16:17Oracle/Oracle Tip

반응형
 -- 테이블 포맷
SQL> desc long_replace
 Name                    Null?      Type
 ------------------ -------- -----------------------
 LONGTYPE                          LONG
 ID                                        VARCHAR2(20)
 CLOBTYPE                          CLOB

long형 타입의 컬럼은 replace가 되질 않는다. 아래와 같은 메세지를 뿌리게 된다.

SQL> update long_replace set longtype = replace(longtype,'기능','기능불가');
update long_replace set longtype = replace(longtype,'기능','기능불가')
                                           *
ERROR at line 1:
ORA-00932: 일관성 없는 데이터 유형: NUMBER이(가) 필요하지만 LONG임

방법 : 
1. long형 포맷이 아닌 clob형 포맷으로 temp성 테이블을 하나 더 만든다.
2. clob형은 replace가 가능하기때문에 temp성 테이블을 업데이트 시킨다.
3. 실질적인 long형 포맷이 있는 테이블에 temp성 테이블과 비교하여 업데이트를 시킨다.
4. 완료.

SQL> create table temp_replace as select to_lob(longtype) longtype, id, clobtype from long_replace;

Table created.

SQL> update temp_replace set longtype=replace(longtype,'기능','기능불가');

1 row updated.

SQL> update long_replace a
  2  set longtype=(select longtype from temp_replace b where a.id=b.id);

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from long_replace; --> 업데이트가 되었는지 확인.

반응형