오라클 CLOB 타입에 입력시 "setString은 32766자 미만의 문자열만 처리할 수 있음" 이라는 오류
Submitted by ole2000 on 금, 08/06/2010 - 14:37
4.1.0 버전이구요.. QueryService 사용합니다.
오라클 버전은 9i, JDBC는 10g용으로 사용중인데..
CLOB에 본문내용 저장시 평소에는 문제가 없는데 본문에 MIME이 들어가서 용량이 클 경우
"setString은 32766자 미만의 문자열만 처리할 수 있음" 이러는 오류가 발생합니다.
여기 메뉴얼 찾아서 <param type="CLOB"/> 으로도 해보고
입력값을 String이 아닌 byte[]로 해봐도 안되네요..
byte[]변경시에는 오라클 ORA-01461 오류가 발생합니다.
메뉴얼이랑 샘플을 쭉봤는데 딱히 해결책을 못찾겠네요.
도움 부탁드립니다.


Re] 오라클 CLOB 타입에 입력시 "setString은 32766자 미만의 문자열만 처리할 수 있음" ...
Oracle 10g 기반에서 언급하신 내용에 맞게 테스트를 수행한 결과 CLOB 데이터가 정상적으로 INSERT 되는 것을 확인하였습니다.
(DB Column Type이 CLOB인 경우 byte[]가 아닌, String 형태로 데이터를 전달하시는 것이 맞습니다.)
현재 LOB 유형의 데이터를 처리하기 위해 QueryService에서는 JDBC 기반 프로그래밍일 경우에 비해 별다른 로직을 수행하고 있지 않으므로 로직상의 문제가 아닌 DBMS 관련 문제일 것으로 추측됩니다.
이를 확인해 보기 위해서는 QueryService가 아닌 일반 JDBC 기반 프로그래밍으로 해당 쿼리문을 실행해 보시면 확실하게 비교가 될 것으로 생각됩니다.
또한 현재 사용하시는 DB의 버전이 9i인데 10g 버전의 라이브러리를 사용하고 있으신데 해당 버전에 맞는 라이브러리를 사용하시는게 맞을 것으로 생각되며, Oracle 버전에 맞는 JDBC Driver Library를 사용하여 테스트해 보시기를 권장드립니다.
끝으로 제가 테스트한 Eclipse 프로젝트를 올려주신 글의 첨부로 등록하오니 그 프로젝트를 그대로 Import하신 후, 다음과 같이 테스트해 보시길 바랍니다.
저희 개발 환경에서는 다음 테스트케이스가 정상적으로 동작하였습니다.
1) src/main/resources/spring/context-datasource.xml 파일 정보를 사용중인 DB에 맞게 수정
2) 클래스패스에 추가된 JDBC Driver Library를 현재 사용하는 JDBC Driver Library로 대체
3) TestCase 실행 (QueryService 이용, JDBC 이용)
JDBC Driver 문제가 맞네요...
제공해주신 테스트 케이스에 들어있는 JDBC 드라이버로 바꾸니까 정상 작동하네요..
감사합니다..