ORA-01002 오류가 발생되는 경우는 여러가지가 있을 수 있겠지만 최근에 만난 사례는 공유하면 좋겠다.
오라클에서 커서 Open 후에 rollback을 처음으로 만나게 되면 ORA-01002 오류 : fetch out of sequence 가 발생될 수 있다. 오라클의 경우 커서 오픈 후 바로 rollback 을 만나면 커서를 닫아 버리기는 경우였다.
이런 현상은 무조건 발생되는 것은 아니고 커서 오픈 전 DML 이 수행된 적이 있을 경우에 발생된다.
커서 오픈 전 수행된 DML 이 commit/rollback 으로 마무리 되지 않은 상태에서 커서가 오픈되고 rollback 을 처음 만나게 될 때 이전 DML 을 rollback 하면서 커서도 close 해 버린다.
커서 오픈 전에 DML 수행되었더라도 커서 오픈 후 commit 을 먼저 만나면 순조롭게 마무리 되기 때문에 대부분 모르고 지나가는 경우가 많기 때문에 처음 닥치면 버그 잡기가 힘들다.
이런 경우의 해결 방법은 커서 오픈전에 commit/rollback 을 해 주거나 이것이 여의치 않은 경우라면 cursor open 후 rollback 이 첫 빳따로 발생되지 않도록 데이터나 로직을 정비하면 해결된다.