Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
3-1751
Сергей
2002-12-11 14:17
2003.01.02
пример программной настройки опций безопасности в MSDE?


1-1768
SergeyVP
2002-12-20 05:44
2003.01.02
Глючный TShellTreeView?


3-1755
LynxSS
2002-12-11 16:39
2003.01.02
Можно ли SQL-м соединить такие 2 таблицы.


14-1889
----
2002-12-13 13:50
2003.01.02
Из исходника диаграмка (чем и возможно ли)????


3-1746
SergeySubbotin
2002-12-11 16:06
2003.01.02
Работа с DataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский