sys_connect_by_path관련 도움 요청입니다. 0 3 3,527

by 김승호 [2007.03.22 17:23:50]


제가 아래와 같은 소스를 작성했는데요 이런 에러가 계속 생깁니다.
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value

특별한 이상은 모르겠는데 자꾸 에러가....
처음 써보는 거라 경험이 없어서 쿼리가 혹시 잘못 되었나 해서 질문 드립니다.
혹시 원인을 아시는 분은 좀 알려주세요....

SELECT B.ADMSIDO,
   C.ADMSGG,
   A.APPL_YMD, A.EGMINDNM, A.EGMOWNNM, A.EGMCOMAD,
       substr(max(sys_connect_by_path(A.CODE_CTN,' ')),2) as CODE_CTN,
   A.SRV, A.MET,
   substr(max(sys_connect_by_path(A.EQUIP,'/')),2) as EQUIP  --잘모르겠음.
FROM(
------ 요기부터.
SELECT A.EGMDMNO, SUBSTR(A.EGMADMCD, 1, 2) AS SIDO, SUBSTR(A.EGMADMCD, 1, 5) AS SGG,  
       A.APPL_YMD, A.EGMINDNM, A.EGMOWNNM, A.EGMCOMAD,
   C.CODE_CTN,
       D.SRV, D.MET,
   F.CODE_CTN || ', ' || TRUNC(E.SIZ,0) || G.CODE_CTN || ', ' || TRUNC(E.QT,0) AS EQUIP,
   ROW_NUMBER () over (partition by A.EGMDMNO order by C.CODE_CTN) rnum
FROM EGM A  
LEFT JOIN CGG_RURPW B ON A.EGMDMNO = B.DMNO
LEFT JOIN CODE C ON B.ABW_GBN = C.CODE AND C.CODE_ID = 'ENV325'
LEFT JOIN CGG_RUR D ON A.EGMDMNO = D.DMNO
LEFT JOIN CGG_TPBV E ON A.EGMDMNO = E.DMNO
LEFT JOIN CODE F ON E.ABW_CAY_EQI_GBN = F.CODE AND F.CODE_ID = 'ENV332'
LEFT JOIN CODE G ON E.UNT_CODE = G.CODE AND G.CODE_ID = 'CMM017'
WHERE A.APPL_YMD BETWEEN '2004.01.01' AND '2004.12.31' --#조건1
AND SUBSTR(A.EGMADMCD, 1, 2) = '11'    --#조건2
AND A.EGMDEPGBN = '37' AND NVL(A.DCB_YMD,'9999.99.99') = '9999.99.99'
-------- 요기까지 따루하면 이상없음
) A
JOIN DMT_ADMCODE_SIDO B ON A.SIDO = B.SIDO_CODE
JOIN DMT_ADMCODE_SGG C ON A.SGG = C.SGG_CODE
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1
GROUP BY B.ADMSIDO, C.ADMSGG, A.APPL_YMD, A.EGMINDNM, A.EGMOWNNM, A.EGMCOMAD, A.SRV, A.MET
--ORDER BY B.SIDO_CODE, C.SGG_CODE

토드에서 실행했는데 start with절 바로 위에 있는 DMT_ADMCODE_SGG C요 부분에 이상이 있다고 가리킵니다.


오라클은 10g를 쓰고 있습니다. mysql의 group_concat함수때문에 오라클로 변경을 한것인데....고수님들 조언 부탁드립니다.
by finecomp [2007.03.22 00:00:00]
A.CODE_CTN컬럼값 중에 space가 들어있는 데이터가 있어서 space가 이 컬럼의 계층간 구분자역할을 할 수 없기 때문에 나는 오류입니다.
또는 A.EQUIP에 /가 들어있던지...;

건승하시길...수고하세요~~

by 김승호 [2007.03.23 00:00:00]
감사합니다..

by 김승호 [2007.03.23 00:00:00]
위에 글에서
substr(max(sys_connect_by_path A.CODE_CTN,',')),2) as CODE_CTN,
substr(max(sys_connect_by_path(A.EQUIP,'& ')),2) as EQUIP
의 결과를 중복 없이 출력하려면 ?? 어떻게 하죠??
DISTINCT의 위치좀 알려주세요..
위치를 바꿔봐도 중복이 제거되질 않아요
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입