본문 바로가기

Server Oriented/Java & JSP

ORA-22990: LOB 위치는 트랜잭션을 걸칠 수 없습니다

LOB(Longraw, Blob, Clob) 등을

select ... for update 등등의 방법으로

DB 에 넣으면서 Stream 을 flush() 할 때..

 

아래와 같이, flush() 가 commit() 뒤에 존재하면 오류.

 

try{

  ...

 

  conn.commit();

 

}catch(Exception e){

  ...

}finally{

  ...

  stream.flush();

}

 

 

 

예외 상황이 발생하더라도

flush() 하고자 finally 에 넣겠다는 의도였겠지만..

 

DB 상의 LOB 처리시에는

try 문 안에서 flush() 한 다음 commit() 하고

finally 에서 close() 하는 것이 맞음.