powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархический запрос, обратный SYS_CONNECT_BY_PATH
22 сообщений из 22, страница 1 из 1
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345156
Dancing-master
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345162
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переставить оператор PRIOR в другую сторону условия
(если это не считается перестроением запроса)
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345196
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
если база не в екзотической кодировке то недокументировано
Код: plaintext
1.
2.
3.
4.
5.
SQL> select reverse('123') from dual;--побайтно

REV
---
 321 
зы
мож в 10 еще че-то дoбавили
.....
stax
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345225
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax. Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот
Код: plaintext
1.
SQL> select reverse('123') from dual;--побайтно
И что по твоему должно получиться из прямого пути \Станислав\гонит\пургу ? :)
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345231
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
Код: plaintext
1.
select ..., (select max(sys_connect_by_path) from обратное дерево от текущего узла) as reversed_path
from ...
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345692
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
Код: plaintext
1.
select ..., (select max(sys_connect_by_path) from обратное дерево от текущего узла) as reversed_path
from ...

LIO возрастет минимум в 2 раза.
Может, имеет смысл написать собственную функцию, которая разобъет строку на токены и перестрит их в обратном порядке?
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34345731
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RA\\/ENLIO возрастет минимум в 2 раза.Пока не вижу в этом проблемы :)
RA\\/ENМожет, имеет смысл написать собственную функцию, которая разобъет строку на токены и перестрит их в обратном порядке?А возможно эффективней будет модифицированное и доработанное решение ModelR/SY.
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34347908
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic Stax. Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот
Код: plaintext
1.
SQL> select reverse('123') from dual;--побайтно
И что по твоему должно получиться из прямого пути \Станислав\гонит\пургу ? :)
спасиб
действительно не работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SQL> select reverse('\Станислав\гонит\пургу') from dual;

REVERSE('\СТАНИСЛАВ\ГО
----------------------
угруп\тиног\валсинатС\

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.
select max(SYS_CONNECT_BY_PATH(rr,';')||';')
from (
SELECT id,x,SUBSTR (s,
                 INSTR (s, ';',  1 , x) +  1 ,
                 INSTR (s, ';',  1 , x +  1 ) - INSTR (s, ';',  1 , x) -  1 
               ) rr
          ,decode(x,max(x) over(partition by id), 1 , 0 ) st
          FROM
(SELECT  rownum id,SYS_CONNECT_BY_PATH(ename,';')||';' S
    FROM  emp
    START WITH mgr is NULL
    CONNECT BY PRIOR empno = mgr) t
,pivot
       WHERE x < (LENGTH(s)-LENGTH(REPLACE(s,';')))
order by id,x)
    START WITH st= 1 
    CONNECT BY PRIOR x- 1  = x
               and PRIOR id = id
group by id
SQL> /

MAX(SYS_CONNECT_BY_PATH(RR,';')||';')
-----------------------------------------------
;KING;
;JONES;KING;
;SCOTT;JONES;KING;
;ADAMS;SCOTT;JONES;KING;
;FORD;JONES;KING;
;SMITH;FORD;JONES;KING;
;BLAKE;KING;
;ALLEN;BLAKE;KING;
;WARD;BLAKE;KING;
;MARTIN;BLAKE;KING;
;TURNER;BLAKE;KING;
;JAMES;BLAKE;KING;
;CLARK;KING;
;MILLER;CLARK;KING;

 14  rows selected.

......
stax
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34348341
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax...
действительно не работает
....
stax
(там, где реверс в шоколаде ;)
Код: plaintext
1.
2.
3.
4.
5.
with t as (select  1  r,'Некто' s from dual
     union select  2   ,'Гонит' from dual
     union select  3   ,'Пургу' from dual
) select reverse(sys_connect_by_path(reverse(s),'/')) cba
        ,sys_connect_by_path(s,'/')                   abc
from t start with r= 1  connect by prior r+ 1 =r;
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #34348368
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish
Код: plaintext
select reverse(sys_connect_by_path(reverse(s),'/')) cba
Прикольно!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #38440780
Ровный чел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хо-хо ламьё...
Вот как пишут профи)

Код: plsql
1.
2.
3.
4.
5.
select listagg(path_tbl.PATH_ONE, '.') within group(order by path_tbl.lvl desc) as path
  from (SELECT REGEXP_SUBSTR('123.234.345.456.567', '[^.]+', 1, LEVEL) as PATH_ONE,
               level as lvl
          FROM DUAL
       CONNECT BY INSTR('123.234.345.456.567', '.', 1, LEVEL - 1) > 0) path_tbl
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #38441152
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ровный чел,

во первых, коли уж гробы откапываете, так будьте адекватнее (в частности, в смысле версий сервера)
во вторых, ничего нового вашим постом вы обществу не сказали
а в третьих, метод из того гроба на сколь-нибудь значительных данных натянет ваше творчество со свистом
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #38441918
pectopatop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ровный чел,

в четвертых, код усложнен по всем параметрам: длине, сложности понимания, количеству используемых функций (а значит потенциальных проблем), скорости выполнения, возможности "подсунуть в индекс"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39037749
Oleg B 2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эх, отцы...

select reverse(SYS_CONNECT_BY_PATH(reverse(col1),'/')) from ...
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39037778
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg B 2000,

В чем смысл поминать третий раз недокументированную и ограниченно применимую функцию в третий раз спустя 8+ лет.
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39038065
А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А
Гость
Oleg B 2000,

+1
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39038085
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АOleg B 2000,

+1От мултибайта не зарекайся.
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39038150
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicАOleg B 2000,

+1От мултибайта не зарекайся.
это конечно,
но не проблема и создать мультибайтовый вариант blabla_mb_reverse
(впрочем, как и не проблема сляпать функцию-переставлятель зада-наперёд не посимвольный, а ,чё там, потеговый - а-ля сабж )
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39038285
R CTE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с 11.2 решение склеивания пути уже не упирается в сысконнектбыпатх.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39668215
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R CTEс 11.2 решение склеивания пути уже не упирается в сысконнектбыпатх.
Интересно, а какие еще варианты есть?
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39668314
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerИнтересно, а какие еще варианты есть?
Код: plsql
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.
column node_path_reverse format a30

with s as (
select 1  id, null parent_id from dual union all
select 2  id, null parent_id from dual union all
select 3  id,    1 parent_id from dual union all
select 4  id,    1 parent_id from dual union all
select 5  id,    2 parent_id from dual union all
select 6  id,    2 parent_id from dual union all
select 7  id,    5 parent_id from dual union all
select 8  id,    5 parent_id from dual union all
select 9  id,    6 parent_id from dual union all
select 10 id,    6 parent_id from dual),
r (id, parent_id, node_path_reverse) as
(select s.id, s.parent_id, to_char(id)
 from s
 where parent_id is null
 union all
 select s2.id, s2.parent_id, s2.id || '-' || node_path_reverse
 from r s1, s s2
 where s2.parent_id = s1.id
)
select *
from r;

        ID  PARENT_ID NODE_PATH_REVERSE
---------- ---------- ------------------------------
         1            1
         2            2
         3          1 3-1
         4          1 4-1
         5          2 5-2
         6          2 6-2
         7          5 7-5-2
         8          5 8-5-2
         9          6 9-6-2
        10          6 10-6-2

10 rows selected.
...
Рейтинг: 0 / 0
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
    #39668420
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talkerкакие еще варианты есть?До 9го уровня обратный порядок можно получить регекспом без подзапросов, а комбинацией таких регекспов можно умножать глубину.
До 3го уровня можно обойтись конкатенацией без sys_connect_by_path.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархический запрос, обратный SYS_CONNECT_BY_PATH
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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