Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Полученить строку иерархии по пути (Oracle 10g) / 9 сообщений из 9, страница 1 из 1
23.03.2017, 11:59
    #39425595
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Есть иерархический справочник со схемой ID-ParentID.
Мне нужно получить из него значение, соответствующее определенному пути в иерархии.
Получить это значение можно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
from
(
  select DIRECTORY_ID as ID, VALUE, DESCRIPTION, reverse(sys_connect_by_path(reverse(MNEMONIC),'/')) as PATH
  from DIRECTORY
  connect by DIRECTORY_ID = prior PARENT_ID
)
where PATH like 'configuration/tarifficators/radius/type_detect/type1/attr1/'


А можно ли получить результат сразу?
...
Рейтинг: 0 / 0
23.03.2017, 12:15
    #39425630
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Alibek B.
Код: plsql
1.
reverse(sys_connect_by_path(reverse

В чём говнокодистость этого, хоть знаешь?
...
Рейтинг: 0 / 0
23.03.2017, 12:44
    #39425688
реверсия
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Alibek B.,

У тебя в sys_connect слеш направо /, после reverse меняется на обратный, а проверяешь в where опять прямой.
...
Рейтинг: 0 / 0
23.03.2017, 12:47
    #39425696
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
реверсияAlibek B.,

У тебя в sys_connect слеш направо /, после reverse меняется на обратный, а проверяешь в where опять прямой.ну ваапще-то у него два реверса
всё логично
...
Рейтинг: 0 / 0
23.03.2017, 12:49
    #39425698
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
ой, мамочки, что я несу... ))))))
...
Рейтинг: 0 / 0
23.03.2017, 13:35
    #39425743
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Alibek B.
Код: plsql
1.
2.
  from DIRECTORY
  connect by DIRECTORY_ID = prior PARENT_ID

Отсутствие корней тоже говорит о быдлокоде.
...
Рейтинг: 0 / 0
23.03.2017, 13:42
    #39425754
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Ок.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with D as
(
  select DIRECTORY_ID as ID, VALUE, DESCRIPTION
  , sys_connect_by_path(MNEMONIC,'/') as PATH
  from DIRECTORY
  connect by PARENT_ID = prior DIRECTORY_ID
  start with PARENT_ID is null
)
select *
from D
where PATH like '/configuration/tarifficators/radius/type_detect/type1/attr1'



Можно ли сразу получить значение VALUE для указанного пути?
...
Рейтинг: 0 / 0
23.03.2017, 15:21
    #39425863
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Код: plsql
1.
2.
where connect_by_isleaf = 1
connect by ... and mnemonic = regexp_substr('...', '[^/]+', 1, level)
...
Рейтинг: 0 / 0
23.03.2017, 16:16
    #39425932
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полученить строку иерархии по пути (Oracle 10g)
Да, про такое я не сообразил.
Правда у меня в результаты также попадают все остальные корневые записи (с дополнительным условием connect корневые узлы превращаются в конечные ветки без потомков), поэтому добавил в WHERE еще LEVEL > 1.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Полученить строку иерархии по пути (Oracle 10g) / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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