SELECT LEVEL AS le, SE_BASIC_DATA.COLUMN1, SE_BASIC_DATA.ID,SE_REQ_ITEM_LINK_INFO.* FROM SE_REQ_ITEM_LINK_INFO SE_REQ_ITEM_LINK_INFO LEFT JOIN SE_BASIC_DATA on LINK_TYPE = SE_BASIC_DATA.ID
START WITH DOCUMENT_FROM = 120800 or DOCUMENT_TO=654386
CONNECT BY nocycle PRIOR (DOCUMENT_FROM ||'_'||ITEM_FROM) =(DOCUMENT_TO ||'_'||ITEM_TO)
WITH t1(id,DOCUMENT_FROM, DOCUMENT_TO,ITEM_FROM,ITEM_TO, lvl, root_id, path) AS (
-- Anchor member.
SELECT DOCUMENT_FROM,
DOCUMENT_TO,
ITEM_FROM,
ITEM_TO,
ID,
1 AS lvl,
id AS root_id,
TO_CHAR(id) AS path
FROM SE_REQ_ITEM_LINK_INFO
WHERE DOCUMENT_FROM = 120800 or DOCUMENT_TO=654386
UNION ALL
-- Recursive member.
SELECT t2.DOCUMENT_FROM,
t2.DOCUMENT_TO,
t2.ITEM_FROM,
t2.ITEM_TO,
t2.ID,
lvl+1,
t1.root_id,
t1.path || '-' || t2.id AS path
FROM SE_REQ_ITEM_LINK_INFO t2, t1
WHERE (t1.DOCUMENT_FROM ||'_'||t1.ITEM_FROM) =(t2.DOCUMENT_TO ||'_'||t2.ITEM_TO)
)
SEARCH DEPTH FIRST BY id SET order1
CYCLE id SET cycle TO 1 DEFAULT 0
SELECT DOCUMENT_FROM,
DOCUMENT_TO,
ITEM_FROM,
ITEM_TO,
RPAD('.', (lvl-1)*2, '.') || id AS tree,
lvl,
root_id,
path,
cycle
FROM t1
ORDER BY order1;
SELECT LEVEL AS le, SE_BASIC_DATA.COLUMN1, SE_BASIC_DATA.ID,SE_REQ_ITEM_LINK_INFO.* FROM SE_REQ_ITEM_LINK_INFO SE_REQ_ITEM_LINK_INFO LEFT JOIN SE_BASIC_DATA on LINK_TYPE = SE_BASIC_DATA.IDSTART WITH DOCUMENT_FROM = 120800 or DOCUMENT_TO=654386CONNECT.