홈 › SQL 고급 › 04 / 10

계층 쿼리: CONNECT BY 와 재귀 CTE

섹션 6진행 0 / 10

5. 자주 하는 실수 (Tip)

실수 1: 순환 데이터에서 재귀 CTE 가 끝나지 않는다

잘못된 mgr 값 하나로 A→B→A 순환이 생기면 재귀 CTE 는 스스로 멈추지 않습니다. MySQL·MSSQL 은 한도에서 오류로 끊기지만, 한도가 없거나 큰 DB 에서는 오래 돕니다. 깊이 제한(lvl < n)을 습관으로 달고, 순환 가능성이 있으면 변형 2 처럼 경로 검사를 겁니다.

실수 2: MySQL·MSSQL 에서 경로 컬럼이 잘리거나 오류가 난다

MySQL·MSSQL 은 앵커의 문자열 타입과 길이가 재귀부까지 고정됩니다. 앵커에서 '/' || name 처럼 짧게 시작하면 경로가 길어질 때 MSSQL 은 타입 불일치 오류, MySQL 은 잘림이나 오류가 납니다. 앵커에서 CAST(... AS VARCHAR(200)) 로 길이를 넉넉히 늘립니다. H2 는 이 차이를 재현하지 못합니다.