Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Oracle] ORA-01436: CONNECT BY loop in user data Computer & Program

iBatis가 DB로 부터 이상한 오류를 받아와서 찍는다. 당췌 이게 먼 소린지 몰랐다.

Cause: java.sql.SQLException: ORA-01436: CONNECT BY loop in user data


오라클 오류 코드(ORA-01436)로 검색을 해봤더니.. START WITH, CONNECT BY 구문을 쓰면서 무한 루프에 빠져서 허우적대고 있다는 소리다. 난 CONNECT BY 구문은 써본 일이 없으니 오류 메시지에 CONNECT BY를 봐도 먼 소린지 어리둥절했을 뿐..

CONNECT BY 구문은 다단계 표현을 할 수 있도록 여러 검색 결과(테이블 등)를 이어준다. 게시판의 답글이나 트리 구조 같은 계층적 구조를 조회할 때 유용하게 쓸 수 있다. 헌데 이게 루프를 돌아서 계층이 무한대로 하위 계층으로 내려가고 있다는 것이다.

원래 나의 의도는 이렇게 생긴 결과값에서 A - B - C - D 순으로 계층이 되길 원했는데..
PARENT   CHILD
---------------
A           B
B           C
C           D


query를 수행하는 과정에서 B와 C가 동일한 결과값이 나와서 아래와 같이 생겨버렸다. 그랬더니 B - B가 계속 돌고 도는 듯이 루프에 빠져버렸다.
PARENT   CHILD
---------------
A           B
B           B
B           D


해결 방법은.. 이런 경우가 발생하는 실제 query를 실행해 보면서 데이터가 어떻게 조회되는지 확인해서 루프를 제거하면 된다. 위의 예제 B - B와 같은 녀석들을 제거하면 된다.

덧글

  • 최고에요! 2013/05/21 16:40 # 삭제 답글

    저도 계층형 쿼리땜에 고생좀 하다가 여기 들어오게 됐는데,
    정말 많은 도움됐습니다!!
    정말 감사드립니다!! :)
  • Sigel 2013/05/21 22:27 #

    감사합니다. 오라클 밖에 안 되지만.. 재밌긴 하죠..
    게시판 만들 때도 편하지만 가끔 헷갈려버리면 완전 꼬이죠 ㅋㅋ
댓글 입력 영역

Google AdSense (text/image)