8c7f6c03

Упорядочение результата


Для придания порядка строкам результата в запросах с CONNECT BY используется особая конструкция ORDER BY SIBLINGS. Аналогично в вынесенном рекурсивном запросе используется специальное указание SEARCH. В рамках последнего, в частности, задается вымышленое имя столбца, в котором СУБД автоматически проставит числовые значения, и который включит автоматически в порождаемый набор столбцов, допуская в последующей обработке его использование во фразе ORDER BY для осуществления упорядочения. Пример: ROLLBACK;

WITH stepbystep ( node, way, distance ) AS ( SELECT node, parent '-' node, distance FROM route WHERE parent = 'Москва' UNION ALL SELECT r.node , s.way '-' r.node , r.distance + s.distance FROM route r INNER JOIN stepbystep s ON ( s.node = r.parent ) ) SEARCH DEPTH FIRST BY node DESC SET orderval

SELECT way, distance, orderval

FROM stepbystep ORDER BY orderval DESC

/

Ответ:

WAY DISTANCE ORDERVAL ---------------------------------------- ---------- ---------- Москва-Ленинград-Выборг 831 5 Москва-Ленинград 696 4 Москва-Новгород-Ленинград-Выборг 852 3 Москва-Новгород-Ленинград 717 2 Москва-Новгород 538 1

Подробности и прочие свойства построений указания SEARCH приведены в документации по Oracle.



Содержание раздела