개발관련/오라클2009. 1. 29. 15:45
BLOB, CLOB과 같은 LOB 타입의 데이터의 경우 일반적인 select문 사용으로는 내용을 볼 수 없다.
select문에 오라클의 시스템함수를 사용하여 볼 수 있다.

관련함수 : DBMS_LOB.SUBSTR, DBMS_LOB.INSTR, UTL_RAW.CAST_TO_VARCHAR2, UTL_RAW.CAST_TO_RAW

예제 :
select log_id, log_point, utl_raw.cast_to_varchar2(dbms_lob.substr(msg_data,2,179)) sub_msg_data
     , dbms_lob.instr(msg_data, utl_raw.cast_to_raw('HIMS01'),1,5) ins_msg_data from almstlog
     where log_id = '2009012017454402999581400350';

utl_raw.cast_to_varchar2(dbms_lob.substr(msg_data,2,179)) --> 테이블 almstlog의 컬럼 msg_data가 BLOB 형태로
저장되어 있고 그 내용이 문자인 경우 어떤 문자가 들어가 있는지 확인할 수 있다. BLOB 내용이 이미지와 같은 binary
형태라면 이와 같이 substring으로 문자를 뽑아내는 것은 별 의미가 없다. 수자 179는 시작위치 179열을, 수자 2는 시작
위치에서 2byte까지 substring하라는 의미이다.

dbms_lob.instr(msg_data, utl_raw.cast_to_raw('HIMS01'),1,5) --> 테이블 almstlog의 컬럼 msg_data에서 찾고자 하는
문자열의 위치를 리턴한다. 1은 offset이고, 5는 반복회수로서 일치하는 문자가 5번째 나온 위치를 리턴하라는 의미이다.

참고 : blob타입 크기 구하기 --> dbms_lob.getlength(msg_data)

관련정보 : http://blog.daum.net/oraclejava/15857755
Posted by 자개비