Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Help, PLEASE

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Сарсенов



Зарегистрирован: 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;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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    Заголовок сообщения: Спасибо за ответ. Ответить с цитатой

Спасибо за ответ.
Только я не понял роль рекурсивной процедуры
в сортировке (в пределах каждого уровня иерархии).
Хотя бы намекни примерно, плиз.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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 Laughing
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...