순환 WITH 질의를 실행하는 중 주기가 감지되었습니다 원인을 알고 싶습니다! 0 6 3,459

by 홍길덩이 [SQL Query] 오라클 [2019.03.26 10:49:57]


어제 마농님께서 답변주신 쿼리에 실제 데이터를 이용하여 실행해보니

 

"순환 WITH 질의를 실행하는 중 주기가 감지되었습니다"

오류가 발생하는데 

검색해도 잘 나오지가 않습니다.

 

어떤 경우에 발생하는건가요?

 

by 마농 [2019.03.26 10:54:25]

A-B-C-D-E-A 처럼 앞에 나온게 또나오게 되면 무한루프에 빠지게 됩니다.
이런 경우에 무한루프에 빠지지 않도록 미리 에러를 발생시키는 것입니다.
그런데 왜 그런 오류가 날까요? 나름 순환 오류 안나게 짠 쿼리인데요?
적용하신 쿼리가 답변드린 쿼리와 다른게 아닐런지?


by 홍길덩이 [2019.03.26 13:25:08]

순환참조 원인은 찾아서 고쳤습니다!!

감사합니다.

하지만 새로운 문제가 발생했는데요..

 

, W_TEMP(ITEM_PATH, LV, ITEM_CODE, 납품일, TO_ITEM) AS
(
SELECT CAST('-' || ITEM_CODE AS VARCHAR2(99)) ITEM_PATH
     , 1 LV
     , ITEM_CODE
     , 납품일

      -->> MIN(B.TO_ITEM) KEEP(DENSE_RANK FIRST ORDER BY B.아이템변경시간, C.납품일, B.TO_ITEM) TO_ITEM

  
     , (SELECT MIN(B.TO_ITEM) KEEP(DENSE_RANK FIRST ORDER BY B.아이템변경시간, C.납품일, B.TO_ITEM) TO_ITEM
          FROM W_TIME B
             , W_NAME C
         WHERE B.FROM_ITEM = A.ITEM_CODE
           AND C.ITEM_CODE = B.TO_ITEM
        ) TO_ITEM
  FROM W_NAME A
 WHERE ITEM_CODE = (SELECT MIN(ITEM_CODE) KEEP(DENSE_RANK FIRST ORDER BY 납품일) FROM W_NAME)

 

실제 데이터의 TO_ITEM 은 규칙이 없어서 MIN 값으로 ITEM 을 가져오면 잘못된 데이터가 나옵니다.

아이템 변경시간>납품일로만 빠른순으로만 TO_ITEM을 가져와야하는데 어떻게 해야될까요?


by 마농 [2019.03.26 13:29:58]

ORDER BY 절이 바로 그 의미인데요?
ORDER BY b.아이템변경시간, c.납품일


by 마농 [2019.03.26 11:16:19]

어제 샘플을 다시 확인해 보니 'D', 'D' 인 자료가 존재하네요?
'D', 'G' 여야 할 자료인데? 오타인가요?
실제로도 이런 데이터가 존재하나요?


by 홍길덩이 [2019.03.26 13:34:31]

'D', 'D'는 오타입니다;

데이터는 좀더 확인해보겠습니다.

답변 감사합니다


by 홍길덩이 [2019.03.26 13:42:56]

넵 ORDER BY 절 의미 이해 됐습니다. 제가 잘못 생각하고 있었네요~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입