2016-10-26 7 views
0

나는 다음과 같은 연결을 포함하는 질의를 가지고있다;오라클의 이전 쿼리로 연결에서 오는 경로에 REGEXP_LIKE를 적용하는 쉬운 방법이 있습니까?

SELECT SYS_CONNECT_BY_PATH(ENAME, '/') as path 
FROM EMP 
WHERE CONNECT_BY_ISLEAF=1 
START WITH MGR IS NULL CONNECT BY 
PRIOR EMPNO=MGR; 

결과는

path 
----------------------------------- 
/KING/JONES/SCOTT/ADAMS 
/KING/BLAKE/ALLEN 
/KING/BLAKE/WARD 
/KING/BLAKE/MARTIN 
/KING/BLAKE/TURNER 
/KING/BLAKE/JAMES 
/KING/CLARK/MILLER 

가 지금은 '/ KING /가'/ KING/JONES/SCOTT/ADAMS '를 찾기 위해 경로 열을 정규 표현식 (오라클에 REGEXP_LIKE를) 적용하려면 다음입니다 존 '.

할 방법이 있습니까?

+1

분명히 그것은이 없다 두 번째 행 ('왕/존스/포드/스미스')을 찾습니다. 또한, 문제가있는 경우 (이 하나는 그렇지 않습니다), 왜 다른 솔루션이 아닌 REGEXP_LIKE만으로 솔루션을 원하십니까? – mathguy

+0

죄송합니다. 괜찮습니다. 결과 세트를 변경했습니다. 마지막 결과 세트를 생각해보십시오. 정규식 또는 다른 방법을 사용하면 도움이 될 수 있습니다. – user6493966

답변

2

사용 CTE를 사전에

감사 :

with t as (
    SELECT SYS_CONNECT_BY_PATH(ENAME, '/') as path 
    FROM EMP 
    WHERE CONNECT_BY_ISLEAF=1 
    START WITH MGR IS NULL CONNECT BY 
    PRIOR EMPNO=MGR 
) 
select * 
from t 
where path like '/KING/JONE%'; 

(귀하의 예제에서, like이 잘 일을 할 것입니다 - 그리고보다 빠른 regexp_like)

+0

감사합니다. – user6493966