powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в Oracle сделать выборку из древовидной таблицы
21 сообщений из 21, страница 1 из 1
Как в Oracle сделать выборку из древовидной таблицы
    #32164177
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Таблица TreeTable с Иерархической ( древовидной ) структурой элементов любой глубины вложенности ( для каждого элемента глубина вложенности может быть разная )

TreeTable состоит из 3-х полей :
< пример иерархического элемента в таблице > :

Id(уникальный) Name ParentId
-----------------------------------------------------
IdГр_1 Гр_1 <Пусто для головного>
IdГр_2 Пгр_2 IdГр_1
IdГр_3 Пгр_3 IdГр_2
...
IdГр_N Пгр_N IdГр_N-1

Нужно из такой таблицы построить такой SELECT , который бы вытягивал в строчку поля Пгр1, Пгр2, Пгр3, .... ПгрN таблицы TreeTable.
для заданного Id=TaskId , т.е. получить таблицу вида :

Id , Gr1, Gr2, Gr3, .... GrN
---------------------------

где Gr1, Gr2, Gr3, .... GrN ряд имен полей соответсвующих Пгр1, Пгр2, Пгр3, .... ПгрN . Некоторые поля из Gr1...GrN будут незаполнены, т.к. глубина вложенности элементов в TreeTable разная , N - соответствует максимальной.
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164212
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, может забыл, надо еще один столбец в исходной TreeTable придумать DeepLevel - номер глубины вложенности чтобы в результирующей расположить
Gr1,Gr2,...GrN по своим глубинам вложенности
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164241
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще это один из вариантов реализации гибкой древовидной структуры, но возможно, что труднообрабатываемый ;
может кто предложит другой - более легко обрабатываемый , но нужны такие же гибкие возможности. Может нужно применять объекты ?
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164248
Devel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выражение SQL можно построить следующим образом:
SELECT <список полей> FROM Table
INNER JOIN Table Parent1 on Table.ParentID = Parent1.ID
INNER JOIN Table Parent2 on Parent1.ParentID = Parent2.ID
...
INNER JOIN Table ParentN on ParentN-1.ParentID =ParentN.ID

Короче, суть в том что ты джойнишь таблицу саму к себе, присваивая ей разные алиасы.

Надеюсь я тебе хоть чем-то помог.

Кстати, очень интересно, а какого рода информация хранится у тебя в этой древовидной таблице. Просто дело в том, что я сейчас тоже занимаюсь разработкой подобных вещей. Если есть немного времени, можно связаться и обсудить.

С уважением,
Волоцкой Дмитрий,
ICQ 312454045
mailto:DVolotskoi@bisoft.ru
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164285
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Devel:
так во-первых:
в программе на стадии построения запроса неизвестно число полей - глубина вложенности и следовательно нельзя жестко записать запрос - его структура динамическая в зависимости от деревянного элемента
и потом, что такое Parent1,Parent2,... У меня в исходной таблице TreeTable только три (c DeepLevel - четыре ) поля ; давай пользоваться моими именами
во-вторых :
Задача - то очень естественная - на моем предприятии выпускаемую продукцию глассифицируют по :
группам, подгруппам, подподгруппам, и т.д.
Причем данный ассортимент (конкретный экземпляр , ну, скажем булочка "Маковая" ) не обязательно должен находиться на самой нижней ступени иерархии в классификационной структуре, его могут запихнуть и на высшие уровни, Причем время от времени решают , что неплохо бы отнести этот экземпляр вообще к другой группе.
Ну, в общем, как на сайтах переносят логические разделы из одной темы в другую, полагая, что в новой он более правильно будет находиться или , скажем, классифицируют насекомых, вначале ,скажем , относили их к парнокопытным и вполне были этим довольны , а потом , решили, что правильнее их в разряде чешуйчатокрылых рассматривать, ну, в общем , примеров-то куча...
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164315
Devel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если уровень вложенности произвольный то одним SELECTом в общем случае никак. Единственное, можно взять количество уровней вложенности с запасом, тогда будет работать.

Parent1,Parent2, это алиасы (пользовательские имена) твой таблицы, как нетрудно было догадаться по тому месту, которое они занимают в SQL запросе.
Parent переводится как родитель.
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164331
Devel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, если знаешь, подскажи пожалуйста, можно ли где-нибудь еще посмотреть информацию по древовидным таблицам. Я тут собираюсь по ним небольшую работу написать.

Еще по поводу выборки. Есть универсальный способ - написать хранимую процедуру, которая бы получала максимальный уровень вложенности, формировала бы SQL выражение и выполняла бы его. Но это я рассказываю в терминах MS SQL сервер. Ну а в Oracle уж какой-нибудь подобный инструмент тем более должен быть.
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164338
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри доку по иерархическим запросам вида

Код: plaintext
1.
select ... from ... start with ... connect by ...

одним запросом можно получить всю структуру дерева
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164344
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Devel :
Ну в алиасы я не въехал, так как они здесь , я не понял с какого боку - надо , если связывать , то по TreeTable.Id=TreeTable.ParentId, хоть в MS_SQL, хоть где, а в процедуре приходит на ум только курсорная позаписная обработка - а это не хотелось-бы ...

2 Speaker :
> select ... from ... start with ... connect by ...
> одним запросом можно получить всю структуру дерева
Это круто, если , конечно это то, что я хочу - посмотрю ...
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164368
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Speaker:

select ... from ... start with ... connect by ...

will show the hierarchy, however it will display one node per row. What yuniki is looking is the whole hierarchy in one row. In general, it is not possible since SELECT can not have more that 1000 elements in select list. If you know that hierarchy depth will not exceed 1000, you could:

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
SQL> CREATE OR REPLACE
   2     PACKAGE Hierarchy
   3       IS
   4         TYPE BranchTableType IS TABLE OF VARCHAR2( 4000 )
   5           INDEX BY BINARY_INTEGER;
   6         BranchTable BranchTableType;
   7         FUNCTION Branch(
   8                         p_RequestedLevel IN NUMBER,
   9                         p_HierarchyLevel IN NUMBER,
  10                         p_Value          IN VARCHAR2
  11                        )
  12           RETURN VARCHAR2;
  13   END Hierarchy;
  14   /

Package created.

SQL> CREATE OR REPLACE
   2     PACKAGE BODY Hierarchy
   3       IS
   4         FUNCTION Branch(
   5                         p_RequestedLevel IN NUMBER,
   6                         p_HierarchyLevel IN NUMBER,
   7                         p_Value          IN VARCHAR2
   8                        )
   9           RETURN VARCHAR2
  10           IS
  11           BEGIN
  12               IF p_RequestedLevel = p_HierarchyLevel
  13                 THEN
  14                   BranchTable(p_HierarchyLevel) := p_Value;
  15               END IF;
  16               IF p_RequestedLevel > p_HierarchyLevel
  17                 THEN
  18                   RETURN NULL;
  19                 ELSE
  20                   RETURN BranchTable(p_RequestedLevel);
  21               END IF;
  22          END Branch;
  23   END Hierarchy;
  24   /

Package body created.

SQL> COLUMN Level1 FORMAT A10
SQL> COLUMN Level2 FORMAT A10
SQL> COLUMN Level3 FORMAT A10
SQL> COLUMN Level4 FORMAT A10
SQL> COLUMN Level5 FORMAT A10
SQL> COLUMN Level6 FORMAT A10
SQL> COLUMN Level7 FORMAT A10
SQL> COLUMN Level8 FORMAT A10
SQL> COLUMN Level9 FORMAT A10
SQL> SELECT  Hierarchy.Branch( 1 ,LEVEL,ename) Level1,
   2           Hierarchy.Branch( 2 ,LEVEL,ename) Level2,
   3           Hierarchy.Branch( 3 ,LEVEL,ename) Level3,
   4           Hierarchy.Branch( 4 ,LEVEL,ename) Level4,
   5           Hierarchy.Branch( 5 ,LEVEL,ename) Level5,
   6           Hierarchy.Branch( 6 ,LEVEL,ename) Level6,
   7           Hierarchy.Branch( 7 ,LEVEL,ename) Level7,
   8           Hierarchy.Branch( 8 ,LEVEL,ename) Level8,
   9           Hierarchy.Branch( 9 ,LEVEL,ename) Level9
  10     FROM  emp
  11     START WITH mgr IS NULL
  12     CONNECT BY PRIOR empno = mgr
  13   /

LEVEL1     LEVEL2     LEVEL3     LEVEL4     LEVEL5     LEVEL6     LEVEL7     LEVEL8     LEVEL9
 ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 
KING
KING       JONES
KING       JONES      SCOTT
KING       JONES      SCOTT      ADAMS
KING       JONES      FORD
KING       JONES      FORD       SMITH
KING       BLAKE
KING       BLAKE      ALLEN
KING       BLAKE      WARD
KING       BLAKE      MARTIN
KING       BLAKE      TURNER

LEVEL1     LEVEL2     LEVEL3     LEVEL4     LEVEL5     LEVEL6     LEVEL7     LEVEL8     LEVEL9
 ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 
KING       BLAKE      JAMES
KING       CLARK
KING       CLARK      MILLER


Obvioulsy, you would have to add as many elements to select list as your max hierarchy depth.

SY
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164399
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY :
большое спасибо,

Пока я полностью не догнал этот пример, но вижу , что требуется жесткое указание максимального количества полей в запросе ( as many elements to select list as your max hierarchy depth )

А если я не хочу ограничиваться заданием этой самой "max hierarchy depth", т.е. считаю ее наперед неизвестной, то - никак не построить запрос ?
Я в Oracle недавно, помню в MS-Access (прошу прощения за упоминание) есть возможность повернуть таблицу вокруг оси с группированием по поворачиваемым полям : фраза TRANSORM ... SELECT .... PIVOT TABLE
Тогда данные (любое наперед не известное их число в исходной таблице ) превращаются в поля результирующей таблицы
Нет ли такой фичи в Oracle ?

Да и еще небольшая фишка - как быть , если в исходной деревянной таблице есть еще один столбик - LeafId, где сущность листа берется из другой таблицы и в результирующем запросе надо в каждой строчке показать этот LeafId. Т.е. , по сути положить LeafId в свой раздел .
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164513
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY:
еще раз спасибо, вроде догнал.

И еще вопрос не такой глупый как предыдущий -
при насколько мощном множестве эффективно использовать такие структуры.
Есть ли опыт использования такой обработки при огромном (на Ваше усмотрение) числе записей исходной таблицы , если , при этом требуется малое время отклика ,

Просто волнует - нормально ли этот механизм принять как стандартный способ организации иерархических структур в Oracle или он гораздо медленнее жестко связаных иерархических структур , состоящих из нескольких таблиц ?
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164518
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I do not have experience with large hierarchical tables. But here we are using them in quite complex security logic (someway mimicking Oracle security). We have application users and application groups. Application users can be assigned to application groups. Apllication group can be assigned to another group, and so on and so forth. Application privileges can be granted roles. Roles can be granted no other roles, users or user groups. It is all stored as hierarchies. Number of rows does not exceed 10000. Hierarchical queries work quite fast. However most users have on average 2 to 3 roles and are members of no more that 5 groups, so data volume is really light. Since, as far as I know, hierarchical queries are sort based you might need large sort area size.

SY
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32164916
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще попробую спросить :

а нельзя ли в приведенном примере перепостроить запрос так , чтобы выбрать максимальное число полей ( в примере оно = 4, но в зависимости от работы с таблицей Emp может меняться ) , а не жестко заданое запросом = 9 ?
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32165391
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
You would have to use dynamic SQL:

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
SQL> CREATE OR REPLACE
   2     PACKAGE Hierarchy
   3       IS
   4         TYPE WeakRefCursorType IS REF CURSOR;
   5         TYPE BranchTableType IS TABLE OF VARCHAR2( 4000 )
   6           INDEX BY BINARY_INTEGER;
   7         BranchTable BranchTableType;
   8         FUNCTION Branch(
   9                         p_RequestedLevel IN NUMBER,
  10                         p_HierarchyLevel IN NUMBER,
  11                         p_Value          IN VARCHAR2
  12                        )
  13           RETURN VARCHAR2;
  14         FUNCTION GetBranches(
  15                              p_Column   IN VARCHAR2,
  16                              p_StmtCore IN VARCHAR2
  17                             )
  18           RETURN WeakRefCursorType;
  19   END Hierarchy;
  20   /

Package created.

SQL> CREATE OR REPLACE
   2     PACKAGE BODY Hierarchy
   3       IS
   4         FUNCTION Branch(
   5                         p_RequestedLevel IN NUMBER,
   6                         p_HierarchyLevel IN NUMBER,
   7                         p_Value          IN VARCHAR2
   8                        )
   9           RETURN VARCHAR2
  10           IS
  11           BEGIN
  12               IF p_RequestedLevel = p_HierarchyLevel
  13                 THEN
  14                   BranchTable(p_HierarchyLevel) := p_Value;
  15               END IF;
  16               IF p_RequestedLevel > p_HierarchyLevel
  17                 THEN
  18                   RETURN NULL;
  19                 ELSE
  20                   RETURN BranchTable(p_RequestedLevel);
  21               END IF;
  22         END Branch;
  23         FUNCTION GetBranches(
  24                              p_Column   IN VARCHAR2,
  25                              p_StmtCore IN VARCHAR2
  26                             )
  27           RETURN WeakRefCursorType
  28           IS
  29               v_MaxLevel      NUMBER;
  30               v_Stmt          VARCHAR2( 32767 ) := 'SELECT ';
  31               BranchRefCursor WeakRefCursorType;
  32           BEGIN
  33               EXECUTE IMMEDIATE 'SELECT MAX(LEVEL) ' || p_StmtCore
  34                 INTO v_MaxLevel;
  35               FOR v_I IN  1 ..v_MaxLevel LOOP
  36                 v_Stmt := v_Stmt || 'Hierarchy.Branch(' || v_I || ',LEVEL,' ||
  37                             p_Column || ') Level' || v_I || ',';
  38               END LOOP;
  39               v_Stmt := RTRIM(v_Stmt,',') || ' ' || p_StmtCore;
  40               OPEN BranchRefCursor FOR v_Stmt;
  41               RETURN BranchRefCursor;
  42        END GetBranches;
  43   END Hierarchy;
  44   /

Package body created.

Then, if you are on 8i you would:

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SQL> COLUMN Level1 FORMAT A10
SQL> COLUMN Level2 FORMAT A10
SQL> COLUMN Level3 FORMAT A10
SQL> COLUMN Level4 FORMAT A10
SQL> COLUMN Level5 FORMAT A10
SQL> COLUMN Level6 FORMAT A10
SQL> COLUMN Level7 FORMAT A10
SQL> COLUMN Level8 FORMAT A10
SQL> COLUMN Level9 FORMAT A10
SQL> VARIABLE X REFCURSOR
SQL> SET AUTOPRINT ON
SQL> BEGIN
   2       :X := Hierarchy.GetBranches(
   3                                   'ename',
   4                                   'FROM emp START WITH mgr IS NULL CONNECT BY PRIOR empno = mgr'
   5                                  );
   6   END;
   7   /

PL/SQL procedure successfully completed.


LEVEL1     LEVEL2     LEVEL3     LEVEL4
 ---------- ---------- ---------- ----------
 
KING
KING       JONES
KING       JONES      SCOTT
KING       JONES      SCOTT      ADAMS
KING       JONES      FORD
KING       JONES      FORD       SMITH
KING       BLAKE
KING       BLAKE      ALLEN
KING       BLAKE      WARD
KING       BLAKE      MARTIN
KING       BLAKE      TURNER

LEVEL1     LEVEL2     LEVEL3     LEVEL4
 ---------- ---------- ---------- ----------
 
KING       BLAKE      JAMES
KING       CLARK
KING       CLARK      MILLER

 14  rows selected.

And in 9i you could either use the above syntax or:

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SQL> SELECT  Hierarchy.GetBranches(
   2                                 'ename',
   3                                 'FROM emp START WITH mgr IS NULL CONNECT BY PRIOR empno = mgr'
   4                                )
   5     FROM  DUAL
   6   /

HIERARCHY.GETBRANCHE
 --------------------
 
CURSOR STATEMENT :  1 

CURSOR STATEMENT :  1 

LEVEL1     LEVEL2     LEVEL3     LEVEL4
 ---------- ---------- ---------- ----------
 
KING
KING       JONES
KING       JONES      SCOTT
KING       JONES      SCOTT      ADAMS
KING       JONES      FORD
KING       JONES      FORD       SMITH
KING       BLAKE
KING       BLAKE      ALLEN
KING       BLAKE      WARD
KING       BLAKE      MARTIN
KING       BLAKE      TURNER

LEVEL1     LEVEL2     LEVEL3     LEVEL4
 ---------- ---------- ---------- ----------
 
KING       BLAKE      JAMES
KING       CLARK
KING       CLARK      MILLER

 14  rows selected.

SY
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32165491
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечательно, большое спасибо!

Интересно а нельзя каким-ни подзапросом здесь обойтись , без помощи динамического SQL .

Да, и , если не секрет , какие вообще основные инструменты для Oracle разработки Вы используете ?
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32165577
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Интересно а нельзя каким-ни подзапросом здесь обойтись , без помощи
> динамического SQL .

I do not think you can avoid dynamic SQL.

> Да, и , если не секрет , какие вообще основные инструменты для Oracle
> разработки Вы используете ?

Well, I am a DBA and therefore I do not write code. I had to learn PL/SQL to deal with developers always complaining "it was working yeasterday, what did you change" or "it was fast yesterday, what did you change". I use TOAD and SQL*Plus for light coding and TKPROF for query tuning.

SY
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32165898
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY:
> I do not have experience with large hierarchical tables. But here we are using
> them in quite complex security logic (someway mimicking Oracle security). ...

Извините за офтоп, но сейчас мы только начинаем переход на Oracle ( пытаясь пока по малому - только вывести отчеты из старой системы через Oracle ) ;
но сразу хотелось бы понять основные правила построения архитектуры построения приложения.
Как Вы реализуете упомянутые Вами приложения , группы приложений, пользователей ( ну , пользователи, видимо , это и есть USERS в Oracle ) и раздаете им права.
Пока у нас даже с организацией простейшей системы отчетов выходят заморочки. Мы , скажем хотели бы,
чтобы в схеме <Отчеты по Реализации> разработчик <ИвановИИ> имел все права содавать любые объекты : таблицы, вью, процедуры и т.д. , необходимые для разрабатываемых им отчетов, а сама схема <Отчеты по Реализации> могла иметь право селектить из других схем, где лежат таблицы с исходными данными.
Может это принципиально невозможно в Oracle, но хотелось бы как то логично с точки зрения отчетов смоделировать разработку отчетов с помощью объектов базы Oracle.
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32166173
EthernalWonderer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>SY It's cool!
>yuniki Вообще-то иерархические запросы существуют для того, чтобы отображать клиенту сущности в иерархическом виде, при этом перемещения "булочек" из папки в папку выполняется мышкой, как в Explorer. Отображение иерархии в виде таблицы мягко говоря озадачивает. Если Вы хотите, чтобы Ваши "булочки" отличались от "групп" и в иерархическом представлении "булочку" в "булки" перетащить можно было бы, а наоборот - нет, Вам придётся ввести в Вашу иерархическую таблицу дополнительное поле типа "IS_FOLDER CHAR(1) DEFAULT 'Y' CHECK (IS_FOLDER IN('Y','N'))" и добавить поддержку этого поля в клиентской программе.
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32166499
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 EthernalWonderer:

Спасибо за совет, но , чувствуя недоумение , поясню , что это нужно для отчетов ( особенно OLAP подобных )
А касательно перемещения узла булок в лист булочка - так это просто наш лист вырастает в ветку - была булочка, а стала булочка такая и сякая, но это опять же уже касается той обработки дерева, которую я здесь не затрагиваю
...
Рейтинг: 0 / 0
Как в Oracle сделать выборку из древовидной таблицы
    #32180816
@lice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вставлю 3 копейки, если позволите.
Все рекурсивные запросы, как и CONNECT BY, работают очень медленно, по сути. Поэтому если вы действительно пишете рабочую систему, а не один раз
SELECT сделать, я рекомендую вам почитать немного литературы по этому поводу, очень красивые идеи.

http://sdm.viptop.ru/articles/sqltrees.html
http://www.osp.ru/win2000/sql/2001/05/967.htm
http://rdbms.narod.ru/article/tree/index.html

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


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