Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Rekurencja w 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 obsługuje tylko rekurencyjne CTE od 11g Wydanie 2.

We wcześniejszych wersjach użyj CONNECT BY klauzula:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć obiekt oracle.sql.ARRAY?

  2. Jak napisać sparametryzowaną kwerendę wstawiania Oracle?

  3. Oracle:czy kolejność kolumn ma znaczenie w indeksie?

  4. Jak uzyskać maksymalną możliwą datę w Oracle?

  5. Jak odświeżyć zmaterializowany widok w Oracle?