Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сортировка в деревянных запросах, помогите плиз. / 9 сообщений из 9, страница 1 из 1
09.12.2002, 17:37
    #32077488
Василий Алибабаевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
Имеется запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT  

LEVEL  "DQUERY_LEVEL" 
,a.*
,b.DQUERY_XML  "DQUERY_XML"  
,c.DQUERY_USER  "GRANTEE"  
,DECODE(a.DQUERY_USER,USER, 1 , 0 )  "DQUERY_ACCESS_TYPE"  
,d.DQUERY_XML  "DQUERY_CHANGES_XML"  
 

FROM  
SM_DQUERY a left join SM_DQUERY_XML b on (a.DQUERY_ID=b.DQUERY_ID)  
 left join  SM_DQUERY_GRANT c on (a.DQUERY_ID=c.DQUERY_ID AND c.DQUERY_USER=USER) 
  left join SM_DQUERY_CHANGES d on (a.DQUERY_ID=d.DQUERY_ID and d.DQUERY_USER=USER) 

WHERE  
(a.DQUERY_USER=USER OR c.DQUERY_USER=USER) 
START WITH DQUERY_PARENT_ID is Null 
CONNECT BY PRIOR a.DQUERY_ID=DQUERY_PARENT_ID


Необходимо чтобы дочерние ноды внутри родителя сортировались по алфавиту .... как это сделать?
...
Рейтинг: 0 / 0
09.12.2002, 17:44
    #32077490
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
Судя по синтакситу с join'ами, у тебя 9i? Тогда дополни запрос:
Код: plaintext
1.
2.
3.
connect by prior ...
start with ...
order siblings by field_name
...
Рейтинг: 0 / 0
09.12.2002, 17:51
    #32077498
Василий Алибабаевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
Сенькю
...
Рейтинг: 0 / 0
10.12.2002, 06:22
    #32077607
Mergen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
А как это реализовать в oracle8i?
...
Рейтинг: 0 / 0
10.12.2002, 06:28
    #32077609
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
для версии 8i чтобы выполнить сортировку нужно приложить несколько больше усилий. Основной технологией является метод с применением промежуточной таблицы. Лучше всего для этого использовать global temporary table, как наиболее производительное решение. Этот метод использует тот факт, что при отсутствии каких-либо параметров сортировки и/или группировки Oracle будет выбирать строки из таблиц в порядке их физического расположения. Для увеличения производительности, особенно в случае больших объемов выборки, желательно использовать индексирование global temporary table.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create global temporary table tmp_tree (
node_id number,
root_id number);
create unique index i_tmp_node on tmp_tree(node_id);
create index i_tmp_root on tmp_tree(root_id);

insert into tmp_tree
select node_id, root_id from a_tree
order by node_id desc;

select lpad('.',(level- 1 )* 2 ,'.') || to_char(node_id) node, level
from tmp_tree
connect by prior node_id=root_id
start with root_id= 0 ;

NODE			  LEVEL
 -------------------- ----------
 
 1 			       1 
.. 4 			       2 
.... 12 		               3 
...... 19 		       4 
...... 18 		       4 
.... 11 		               3 
.... 10 		               3 
...... 17 		       4 
...... 16 		       4 
...
Рейтинг: 0 / 0
10.12.2002, 06:32
    #32077611
Mergen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
Спасибо за объяснение друг!
...
Рейтинг: 0 / 0
10.12.2002, 06:32
    #32077612
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
Это я не сейчас написал, это выдернуто из будущей статьи по иерархическим
структурам.
...
Рейтинг: 0 / 0
10.12.2002, 11:56
    #32077786
hinotf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
в 8i ещё должен помогать индекс по этому полю
...
Рейтинг: 0 / 0
11.12.2002, 16:42
    #32078614
EternalWonderer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в деревянных запросах, помогите плиз.
Вот ситуация для 8i:

Имеем две таблицы, оччень похожие, структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE CATALOG_SI
(
 ID            NUMBER( 4 )                       NOT NULL,
 PARENT        NUMBER( 4 ),
 CAPTION       VARCHAR2( 50 )                    NOT NULL,
...
CREATE UNIQUE INDEX CATALOG_SI_PK0 ON CATALOG_SI (ID)
CREATE UNIQUE INDEX CATALOG_SI_UC1 ON CATALOG_SI
(PARENT, CAPTION)


При выполнении запроса
Код: plaintext
1.
2.
3.
SELECT  ID, (LEVEL -  1 ) l_parent, caption, is_type
     FROM catalog_si
START WITH PARENT =  0 
CONNECT BY PRIOR ID = PARENT


Первая таблица выводит строки как надо (по алфавиту), а вторая - как попало (видимо, в порядке ввода), зараза, пока в запрос не добавишь хинт вида
Код: plaintext
 /*+ INDEX (CATALOG_si CATALOG_si_UC1) */ 


План запроса без хинта:
Код: plaintext
1.
2.
3.
4.
SELECT STATEMENT Hint=CHOOSE  
CONNECT BY
 INDEX FAST FULL SCAN CATALOG_SI_UC1
 TABLE ACCESS BY USER ROWID CATALOG_SI
 TABLE ACCESS FULL CATALOG_SI        

С хинтом:
Код: plaintext
1.
2.
3.
4.
5.
SELECT STATEMENT Hint=CHOOSE
CONNECT BY
 INDEX FAST FULL SCAN CATALOG_SI_UC1
 TABLE ACCESS BY USER ROWID CATALOG_SI
 TABLE ACCESS BY INDEX ROWID CATALOG_SI
   INDEX RANGE SCAN CATALOG_SI_UC1        


Отсюда продолжение вопроса: является ли применение указанного хинта гарантией требуемого результата?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сортировка в деревянных запросах, помогите плиз. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]