Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Сарсенов
Зарегистрирован: 27.01.2004 Сообщения: 10
|
Добавлено: Вт Янв 27 2004 11:03 Заголовок сообщения: Help, PLEASE |
|
|
Всем добрый день!
Кто-нибудь знает, как отсортировать полученные из
этого запроса строки по полю v,
не нарушив при этом древообразную структуру.
SELECT v, t, d
FROM u
START WITH d=0
CONNECT BY PRIOR t=d; |
|
Вернуться к началу |
|
|
hydrolizer
Зарегистрирован: 01.12.2003 Сообщения: 58 Откуда: Москва
|
Добавлено: Вт Янв 27 2004 11:43 Заголовок сообщения: |
|
|
никак:
Restrictions: If you specify a hierarchical query:
- The same statement cannot also perform a join.
- The same statement cannot also select data from a view whose query performs a join.
- If you also specify the order_by_clause, it takes precedence over any ordering specified by the hierarchical query.
пиши рекурсивную процедуру - тогда в ней ты сможешь сортировать элементы выборки на отдельно взятом уровне иерархии |
|
Вернуться к началу |
|
|
Сарсенов
Зарегистрирован: 27.01.2004 Сообщения: 10
|
Добавлено: Вт Янв 27 2004 13:25 Заголовок сообщения: Спасибо за ответ. |
|
|
Спасибо за ответ.
Только я не понял роль рекурсивной процедуры
в сортировке (в пределах каждого уровня иерархии).
Хотя бы намекни примерно, плиз. |
|
Вернуться к началу |
|
|
hydrolizer
Зарегистрирован: 01.12.2003 Сообщения: 58 Откуда: Москва
|
Добавлено: Вт Янв 27 2004 14:16 Заголовок сообщения: |
|
|
Пример. Дана таблица с иерархией, задаваемой полями up и n:
SQL> select * from hierarchy_tab;
UP N
--------- ---------
1 3
3 10
1 2
6 11
9 12
0 1
3 9
2 8
4 13
1 5
2 6
1 4
2 7
Требуется вывести дерево, упорядочив данные по n. Иерархический запрос нам выдает:
SQL> select lpad('_',(level-1)*3,'_')||n n from hierarchy_tab START WITH up=0 CONNECT BY PRIOR n=up;
N
------------------
1
___3
______10
______9
_________12
___2
______8
______6
_________11
______7
___5
___4
______13
Теперь пишем процедуру:
create or replace
procedure show_hierarchy(i_up in number,io_lev in out number) is
cursor cr is select n from hierarchy_tab where up=i_up order by n;
begin
io_lev:=io_lev+1;
for cr_rec in cr loop
dbms_output.put_line(lpad('_',(io_lev-1)*2,'_')||cr_rec.n);
show_hierarchy(cr_rec.n,io_lev);
end loop;
io_lev:=io_lev-1;
end;
Запускаем:
SQL> declare
2 l_level number:=0;
3 begin
4 show_hierarchy(0,l_level);
5 end;
6 /
1
__2
____6
______11
____7
____8
__3
____9
______12
____10
__4
____13
__5
Данные отсортированы. |
|
Вернуться к началу |
|
|
Сарсенов
Зарегистрирован: 27.01.2004 Сообщения: 10
|
Добавлено: Вт Янв 27 2004 16:39 Заголовок сообщения: |
|
|
Вот теперь понятно.
Большое спасибо тебе, hydrolizer |
|
Вернуться к началу |
|
|
|