Рекурсия в Oracle

У меня есть следующая таблица в oracleе:

Parent(arg1, arg2) 

и я хочу транзитивное замыкание отношения родителя. То есть, я хочу следующую таблицу

 Ancestor(arg1, arg2) 

Как это возможно в Oracle?

Я делаю следующее:

 WITH Ancestor(arg1, arg2) AS ( SELECT p.arg1, p.arg2 from parent p UNION SELECT p.arg1 , a.arg2 from parent p, Ancestor a WHERE p.arg2 = a.arg1 ) SELECT DISTINCT * FROM Ancestor; 

Я получаю ошибку

 *Cause: column aliasing in WITH clause is not supported yet *Action: specify aliasing in defintion subquery and retry Error at Line: 1 Column: 20 

Как я могу решить эту проблему без псевдонимов столбцов?

 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 поддерживает только рекурсивный CTE с версии 11g Release 2.

В более ранних версиях используйте предложение CONNECT BY :

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

Oracle позволяет рекурсивные запросы. См .: http://www.adp-gmbh.ch/ora/sql/connect_by.html.

Конечно, они обычно предполагают, что иерархические данные все в одной таблице. Разделение его на отдельные таблицы усложняет ситуацию.

  • хранимая процедура mysql, которая называет себя рекурсивно
  • Сгенерировать код вызова хвостового вызова
  • Мощность, возводимая в квадрат для отрицательных показателей
  • понимание базовой рекурсии
  • Рекурсивный вызов ConcurrentHashMap.computeIfAbsent () никогда не завершается. Ошибка или «функция»?
  • Как искать строку в нескольких файлах и возвращать имена файлов в Powershell?
  • Что такое нерекурсивное решение для последовательности, подобной Фибоначчи, в Java?
  • Рекурсивная функция не возвращает указанное значение
  • Нарушение рекурсии в java
  • Функция рекурсии LINQ?
  • Факториал с использованием рекурсии в Java
  • Interesting Posts

    Заменить вектор, используя вектор индексов

    Отзывчивый веб-сайт уменьшен до полной ширины на мобильном телефоне

    Два интернет-соединения, два маршрутизатора, одна сеть

    Каковы рабочие характеристики sqlite с очень большими файлами базы данных?

    Как вызвать сложный метод COM из PowerShell?

    Как я могу создать пользователя с доступом только для чтения ко всем файлам? (Т.е. root без разрешения на запись)

    Есть ли инструмент управления батареей Acer, который ограничивает заряд батареи? Должен ли я даже беспокоиться?

    Передача данных между страницами с помощью jQuery Mobile?

    Изменение размера изображения пропорционально ограничениям MaxHeight и MaxWidth

    Почему пустая строка начинается с «*» в результате команды history в linux?

    Создание прокрутки мыши в неактивных окнах?

    Объединить несколько дочерних строк в одну строку MYSQL

    ExpireTimeSpan игнорируется после регенерацииIdentity / validateInterval длительность в MVC Identity (2.0.1)

    Использовать или не использовать регулярные выражения?

    Объяснение интерфейсов для учащихся

    Давайте будем гением компьютера.