Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархический запрос, обратный SYS_CONNECT_BY_PATH / 22 сообщений из 22, страница 1 из 1
20.02.2007, 19:40
    #34345156
Dancing-master
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
...
Рейтинг: 0 / 0
20.02.2007, 19:43
    #34345162
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
Переставить оператор PRIOR в другую сторону условия
(если это не считается перестроением запроса)
...
Рейтинг: 0 / 0
20.02.2007, 20:00
    #34345196
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
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
20.02.2007, 20:21
    #34345225
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
Stax. Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот
Код: plaintext
1.
SQL> select reverse('123') from dual;--побайтно
И что по твоему должно получиться из прямого пути \Станислав\гонит\пургу ? :)
...
Рейтинг: 0 / 0
20.02.2007, 20:23
    #34345231
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
Dancing-masterМожно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
Код: plaintext
1.
select ..., (select max(sys_connect_by_path) from обратное дерево от текущего узла) as reversed_path
from ...
...
Рейтинг: 0 / 0
21.02.2007, 08:37
    #34345692
RA\/EN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
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
21.02.2007, 08:52
    #34345731
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
RA\\/ENLIO возрастет минимум в 2 раза.Пока не вижу в этом проблемы :)
RA\\/ENМожет, имеет смысл написать собственную функцию, которая разобъет строку на токены и перестрит их в обратном порядке?А возможно эффективней будет модифицированное и доработанное решение ModelR/SY.
...
Рейтинг: 0 / 0
21.02.2007, 17:12
    #34347908
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
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
21.02.2007, 19:18
    #34348341
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
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
21.02.2007, 19:31
    #34348368
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
orawish
Код: plaintext
select reverse(sys_connect_by_path(reverse(s),'/')) cba
Прикольно!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.10.2013, 09:58
    #38440780
Ровный чел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
хо-хо ламьё...
Вот как пишут профи)

Код: 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
25.10.2013, 13:10
    #38441152
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
Ровный чел,

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

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

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

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

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

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

+1От мултибайта не зарекайся.
это конечно,
но не проблема и создать мультибайтовый вариант blabla_mb_reverse
(впрочем, как и не проблема сляпать функцию-переставлятель зада-наперёд не посимвольный, а ,чё там, потеговый - а-ля сабж )
...
Рейтинг: 0 / 0
28.08.2015, 11:57
    #39038285
R CTE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
с 11.2 решение склеивания пути уже не упирается в сысконнектбыпатх.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
02.07.2018, 10:59
    #39668215
SQL-Talker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
R CTEс 11.2 решение склеивания пути уже не упирается в сысконнектбыпатх.
Интересно, а какие еще варианты есть?
...
Рейтинг: 0 / 0
02.07.2018, 13:46
    #39668314
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
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
02.07.2018, 16:12
    #39668420
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархический запрос, обратный SYS_CONNECT_BY_PATH
SQL-Talkerкакие еще варианты есть?До 9го уровня обратный порядок можно получить регекспом без подзапросов, а комбинацией таких регекспов можно умножать глубину.
До 3го уровня можно обойтись конкатенацией без sys_connect_by_path.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархический запрос, обратный SYS_CONNECT_BY_PATH / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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