Friss topikok

Connect by root 9i

2008.09.23. 08:13 | koc | Szólj hozzá!

A hierarchikus lekérdezések egyik legnagyobb erénye a CONNECT_BY_ROOT unáris operátor, mely a paraméter oszlop értékét az adott sorhoz tartozó gyökérelemből veszi ki. Használata:

SELECT ename AS employee, CONNECT_BY_ROOT empno AS root, LEVEL
FROM scott.emp
START WITH ename='KING'
CONNECT BY NOCYCLE PRIOR empno = mgr AND LEVEL <= 4

Ennek segítségével erdő strukturák esetén meghatározhatjuk minden alsóbb szintű elem gyökerét, és ezzel azt, hogy mely más elemekkel közös fába esik. Oracle 10g alatt. Ugyanis a CONNECT_BY_ROOT operátor itt került bevezetésre.

Mit tehetünk, ha egy 9i verzión dolgozunk, és szükségét érezzük a fenti operátor használatának? Nos van egy kerülőút. Ez a

SYS_CONNECT_BY_PATH(column, char)

operátor. Ez valójában kicsit többet is tud, mint a CONNECT_BY_ROOT, hiszen a column értékeiből állít össze útvonalat a gyökér sortól az aktuális sorig, az útvonal elemeit a char szeparátorral elválasztva egymástól. A column értéke és az eredmény is karakteres formátumú lesz. Mint láthatjuk ebben benne van gyökér sor adott oszlopának értéke, tehát csak ki kell vágnunk:

SUBSTR(
SYS_CONNECT_BY_PATH(column, char),
2,
DECODE(
  instr(
    SYS_CONNECT_BY_PATH(column, char), char, 2
  )
  ,0,LENGTH( SYS_CONNECT_BY_PATH(column, char) ) - 1
  ,INSTR(SYS_CONNECT_BY_PATH(column, char), char, 2) - 2
)
) AS connect_by_root

A módszernek persze két apróbb buktatója is akadhat. Az egyik az, hogy a column értéke csak karakteres lehet, tehát egy reverzibilis átalakítást kell végeznünk rajta, ha eredendően nem az, majd az eredményt visszaalakítani. A másik pedig az, hogy a szeparátor char nem fordulhat elő a column sztringben.

 

Címkék: hierarchical query connect by root sys connect by path

A bejegyzés trackback címe:

https://plsql.blog.hu/api/trackback/id/tr19677026

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása