sql >> Database teknologi >  >> RDS >> Oracle

Rekursion i Oracle

WITH Ancestor(arg1, arg2) AS ( SELECT p.arg1, p.arg2 FROM parent p WHERE arg2 NOT IN ( SELECT arg1 FROM parent ) UNION ALL SELECT p.arg1, a.arg2 FROM Ancestor a JOIN parent p ON p.arg2 = a.arg1 ) SELECT * FROM Ancestor

Oracle understøtter kun rekursiv CTE siden 11g Udgivelse 2.

I tidligere versioner skal du bruge CONNECT BY klausul:

SELECT  arg1, CONNECT_BY_ROOT arg2
FROM    parent
START WITH
        arg2 NOT IN
        (
        SELECT  arg1
        FROM    parent
        )
CONNECT BY
        arg2 = PRIOR arg1
 


  1. GIN-indeks på smallint[]-kolonnen bruges ikke, eller fejloperatoren er ikke unik

  2. Vælg første række i hver GRUPPE FOR gruppe?

  3. Installation af RODBC/ROracle-pakker på OS X Mavericks

  4. Brug af markører til at søge i PostgreSQL