본문 바로가기
Errors

23.01.28 MySQL->Oracle 교체 중 error

by SoulMania 2023. 1. 28.

기존 mysql 사용시 NoticeDAO.java 파일에서

 

String sql = "insert into article (writer_id, writer_name, title, regdate, moddate, read_cnt, isshow) "+ 
 "values(?, ?, ?, ?, ?, 0, 'Y')";

 

이러한 형식으로 insert하였다.(MySQL은 auto_increment 기능이 있어서 insert 시에 auto_increment 기능이 적용된 컬럼에는 굳이 insert 값을 넣지 않아도 되지만 oracle은 해당 auto_increment 기능이 없으므로

 

tmp_seq sequence를 생성하여 아래와 같이 insert하였다.

 

String sql = "insert into article (article_no, writer_id, writer_name, title, regdate, moddate, read_cnt, isshow) "+ 
 "values(tmp_seq.NEXTVAL, ?, ?, ?, ?, ?, 0, 'Y')";

 

 

 

여기까지는 좋았다.

 

그러나 ....

 

NoticeDAO.java 내에 insert 메소드 실행 후에 바로 insert한 게시글에 대한 게시글 번호를 조회하는 Query가 있는데

 

이것원래는  MySQL사용시에는

select last_insert_id() from article;

이러한 query를 사용하여 Notice_content.java측으로 넘겨주는 형식이었는데

 

Oracle 에서는 sequence 사용을 해야하므로 아래와 같은 Query로 변경하였다.

select tmp_seq.nextval from article;

 

그러나 위와 같이 변경 시  .nextval 조회만 하여도 article 테이블 개수 만큼 숫자가 증가하여

 

insert할때 글번호와 content쪽에서 가져다 쓸때의 글번호가 달라 마지막 View단에 넘겨줄때 에러가 발생하였다.

 

 

...엄청 당황스럽고 무엇때문인지 한참 찾았으나... 결론은 sequence조회 시에 옵션을 다르게 주어 해결하였다.

 

select tmp_seq.currval from article;

 

이런식으로  .currval 로 변경하여서 행수가 몇개든 조회를 여러번하든 증가가 되지 않는 옵션으로 해결하였다.