with t as
(select '001' A, '003' B
from dual
union all
select '003' A, '007' B
from dual
union all
select '007' A, '004' B
from dual
union all
select '004' A, '017' B
from dual
union all
select '017' A, '013' B
from dual
union all
select '013' A, '024' B
from dual
union all
select '024' A, '031' B
from dual
union all
select '031' A, '021' B
from dual)
SELECT *
FROM (select LTRIM(SYS_CONNECT_BY_PATH(A, ',') || ',' || B, ',') STR, T.B
from t
start with A = '003'
connect by A = PRIOR B) T1
WHERE T1.B = '013';
(select '001' A, '003' B
from dual
union all
select '003' A, '007' B
from dual
union all
select '007' A, '004' B
from dual
union all
select '004' A, '017' B
from dual
union all
select '017' A, '013' B
from dual
union all
select '013' A, '024' B
from dual
union all
select '024' A, '031' B
from dual
union all
select '031' A, '021' B
from dual)
SELECT *
FROM (select LTRIM(SYS_CONNECT_BY_PATH(A, ',') || ',' || B, ',') STR, T.B
from t
start with A = '003'
connect by A = PRIOR B) T1
WHERE T1.B = '013';
SELECT * FROM
(select * from T
START WITH A=P_START
CONNECT BY PRIOR B=A)
START WITH B=P_END
CONNECT BY PRIOR A=B
SELECT *
FROM (select LTRIM(SYS_CONNECT_BY_PATH(A, ',') || ',' || B, ',') STR, T.B
from t
start with A = '003'
connect by A = PRIOR B AND PRIOR A<>'013') T1
WHERE T1.B = '013';