안녕하세요 이제 1년이 안된 개발자초보입니다. 경험이 미천하여 해결못하는 쿼리가있습니다 .ㅠ
SELECT T.CUST_PATH_CD AS CUST_ORG_PATH_CD
FROM (SELECT MICUST_ID,
SUBSTR(SYS_CONNECT_BY_PATH(Z.MICUST_ID,':'),2) CUST_PATH_CD
FROM MCUTG1160 Z
WHERE TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') BETWEEN Z.VALI_FR_DT AND Z.VALI_TO_DT
START WITH Z.MICUST_ID = '10000918' --회사코드
CONNECT BY PRIOR Z.MICUST_ID = Z.MACUST_ID
AND Z.CUST_REL_CD IN ('B02','B03','B04','B06')
) T
WHERE T.MICUST_ID = '70259937'
위와같은 쿼리로 아래와 같은 결과가 나옵니다. 결과는 문제가 없습니다. 하지만 속도가 문제라 속도를 해결하 고 싶습니다.
10000918:10021478:70056100:70259937
아래와 같이 XMLAGG 를 사용하여 속도문제를 해결하려고하는데
SELECT RTRIM(XMLAGG(XMLELEMENT("MICUST_ID", t.micust_id,':')).EXTRACT('//text()').getStringval(),',') || '70259937' CUST_PATH_CD
FROM
(
SELECT Z.MACUST_ID, Z.MICUST_ID, LEVEL LVL, Z.CUST_REL_CD, Z.MICUST_ID CUST_PATH_CD
-- SUBSTR(SYS_CONNECT_BY_PATH(Z.MICUST_ID,':'),2) CUST_PATH_CD
FROM MCUTG1160 Z
WHERE TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') BETWEEN Z.VALI_FR_DT AND Z.VALI_TO_DT
START WITH Z.MICUST_ID = '10000918' --회사코드
CONNECT BY PRIOR Z.MICUST_ID = Z.MACUST_ID
AND Z.CUST_REL_CD IN ('B02','B03','B04','B06')
and rownum < 4
) T
문제는 rownum 이 LEVEL 의 MAX 값인 4보다 작아야한다는 것인대 속도에 영향을 미치지않고
4를 어떻게 구해오냐 하는것입니다.
결론적으로 XMLAGG 을 사용하기위해
아래 처럼 나오게 하는법을 알고 싶습니다.
제가 초보라 질문하는대 부족한 점이 있을지도 모르겠습니다. 더 필요한 정보같은게 있다면 알려주시면 감사하겠습니다.
10000918
10021478
70056100
70259937