ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다

|

[출처] http://show.ideatree.kr/pages/index.php3?board_content_idx=1003

 

[해결방법] ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다

 

1.OJDBC 버전이 Release 2 인지 확인
2.CLOB 처리시 PreparedStatement를 사용할 경우,
2-1.
먼저 대상 clob field를 INSERT INTO TEST_TABLE(CLOBFIELD)VALUES(empty_clob()) 혹은
UPDATE TEST_TABLE SET CLOBFIELD = empty_clob WHERE idx=999 와 같이 empty_clob()으로
초기화 시킨다.
2-2.
다른 사용자가 CLOB UPDATE 중간에 변경을 못하도록
CLOB Row를 먼저 SELECT~FOR UPDATE 로 잠그고,
SELECT ~FOR UPDATE로 부터 Clob Field값을 얻어서 java.io.Writer 객체를 생성한다.
clobField = rs.getClob(0);
Writer writer = clobField.getCharacterOutputStream();
2-3.
그리고, 입력할 clob데이타로 부터 java.io.Reader 객체를 생성한다.
Reader reader = new CharArrayReader(clobInput.toCharArray());
2-4.
버퍼를 만들어서 reader를 읽어가면서 writer에 읽은만큼 써준다.
char[] buffer = new char[1024];
while( (read = reader.read(buffer, 0, 1024) ) != -1 )
{
 writer.write(buffer, 0, read); //reader를 죽~ 읽어가면서 써준다.
}
reader.close();
writer.close();

 

And