Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.02;
Скачать: CL | DM;

Вниз

CONNECT BY PRIOR ID = PARENT   Найти похожие ветки 

 
EternalWonderer   (2002-12-10 17:26) [0]

Задача: получить иерархическое представление с упорядочением по алфавиту внутри каждой ветви.

Имеем две таблицы, оччень похожие, структура:
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)


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

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

План запроса без хинта:
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

С хинтом:
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

Вопрос 1: отчего первой таблице НЕ требуется хинт? (впрочем, ответ, похоже, очевиден: оптимизатор выбирает разные планы запроса - он же не знает, что мы хотим по афавиту, и для первой таблицы, видимо, у него это получается случайно :)
Вопрос 2: есть ли другой, более "правильный" способ решения задачи (поскольку мне не нравится это самое случайно)?


 
petr_v_a ©   (2002-12-10 17:49) [1]

До 9-й версии способа нет (:
9-ю версию кроме самых отчаянных никто на живых данных пока не использует :)
Лично я в подобных ситуациях сортирую потом в TreeView на клиенте, "случайностям" не доверяю, но это мой подход, его не навязываю


 
Sergey13 ©   (2002-12-11 11:58) [2]

EternalWonderer (10.12.02 17:26)
Поглянь сюда. Похоже.
http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=17699


 
EternalWonderer   (2002-12-11 16:37) [3]

petr_v_a © (10.12.02 17:49)
..."случайностям" не доверяю...
Отлично, мы сходимся во мнениях. Замечу, что сортировка дерева на клиенте - весьма длительная процедура при определённых условиях... Однако при использовании указанного хинта и вторая таблица у меня выводится "как надо".

Отсюда вопрос: это случайность или правило?

Или по - другому: если я буду применять этот хинт во всех случаях, буду ли я получать гарантированно ожидаемый результат?

Sergey13 © (11.12.02 11:58)
Поглядел. Для 9 версии - ясно. Но для 8i лучше я буду пока обходиться хинтами, если, конечно, это даёт гарантию правильного результата (см. выше).


 
petr_v_a ©   (2002-12-11 19:31) [4]

>EternalWonderer (11.12.02 16:37)
>Отсюда вопрос: это случайность или правило?
Все, что явно не описано в документации или в "нотах" техподдержки - случайность, хотя бы и похожая на закономерность, IMHO



Страницы: 1 вся ветка

Текущий архив: 2003.01.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
4-1931
saniok
2002-11-12 12:22
2003.01.02
IE как IWebBrowser


4-1926
alex134
2002-11-16 17:55
2003.01.02
хук на окно


3-1748
sers
2002-12-11 13:29
2003.01.02
Что-то вроде триггера для dbf


1-1788
Ospa
2002-12-20 13:26
2003.01.02
FileRead


1-1830
delpher_gray
2002-12-17 16:45
2003.01.02
CommPortDriver