2007년 8월 3일 금요일

Oracle Long 형 insert 에러... ORA-01461


메일 발송 시스템을 개발하고 있었다..

게시판에 올린글을 메일로 발송하는것이였다.

말이 메일 발송이지 DB에 insert만 하면 끝나는 거였는데..


개발을 다하고 테스트를 하는 도중.. 정말 어이없는 에러 발생..

내용을 Insert하는 CONTENT의 TYPE이 LONG 이다..



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




이런 에러를 내뿜으면서.. 안되는거다..

그래서 글자수가 문제가 되나? 해서 봤지만.. 잘 Insert되는 것중에는,

10000자가 넘는것도 있고, 발송이 안되는건 그 이하의 것도 있고 들쑥날쑥..

'혹시 HTML코드가 문제인가?' (본문내용에 HTML코드가 삽입되어있음)

하여 HTML코드를 replaceAll() 로 정규식으로 치환하여 삭제.. 그래도 안됨..

혹시 줄바꿈에 문제가 있나? '\r\n' 처리.. 안됨..

혹시 ' <- 문자 처리에 오류가 있나? .. 그래도 안됨..

웃긴건 Insert 안되는것을.. 내 테스트 로컬에 Insert 하면 잘 들어간다..


사람 환장한다. -_-


3일동안 정말 해볼꺼 안해볼꺼 다해봤다.. 근데 오늘.. 백지화 상태에서 다시 시작..

글내용을 내가 임의로 넣고 보내봤다..

그런데.. Insert가 안된다!!!!!

뭐지 이뭐병..


그리하여 prepareStatement 를 내용 하나만 집어 넣고,

나머지는 텍스트에 붙여주는 형식으로 했다..

before)
query.append(" INSERT INTO MAIL                                ");
query.append(" (IDX, SNAME, SMAIL, TITLE, CONTENT) ");
query.append(" VALUES(                                              ")
query.append(" ?, ?, ?, ?, ? ");

after)
query.append(" INSERT INTO MAIL                                ");
query.append(" (IDX, SNAME, SMAIL, TITLE, CONTENT) ");
query.append(" VALUES(                                              ");
query.append( maxRow + "'" + sname + "'" + smail + "'" + title + "', ? )" );



이렇게 바꾸니까 된다.. 진짜 어이없네..

왜이런거지? 이유가 뭐지?

java의 버그인가 oracle의 jdbc버그인가?

아님 처리하는 부분에서 내가 모르는 부분이 있나??

대략 난감이네.. 아시는 분들 알려주세요..

댓글 2개:

  1. 아..지금 저도 똑같은 에러가 발생했는데, 이유를 알수 없는겁니다.

    로컬호스트엔 저장이되고, 서버에는 똑같은데 전혀 업로드가 안되고..

    이건 거의 막장 자포자기 수준...

    다 죽어가는데, 님 글을 읽고 회생했습니다.!!!!!!!!!!!

    setString 안쓰고 그냥 넣으니까 되네요..

    너무너무 감사해요 ㅠㅠ

    답글삭제
  2. @놀라버라 - 2008/11/22 15:07
    도움이 되셨다니 다행이네요 ㅎㅎ



    저도 자포자기 했었습니다~

    답글삭제