Иерархический запрос, обратный SYS_CONNECT_BY_PATH

Dancing-master
Дата: 20.02.2007 19:40:43
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
SQL*Plus
Дата: 20.02.2007 19:43:46
Переставить оператор PRIOR в другую сторону условия
(если это не считается перестроением запроса)
Stax.
Дата: 20.02.2007 20:00:36
Dancing-master
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?

если база не в екзотической кодировке то недокументировано
SQL> select reverse('123') from dual;--побайтно

REV
---
321
зы
мож в 10 еще че-то дoбавили
.....
stax
Elic
Дата: 20.02.2007 20:21:01
Stax.
Dancing-master
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот
SQL> select reverse('123') from dual;--побайтно
И что по твоему должно получиться из прямого пути \Станислав\гонит\пургу ? :)
Elic
Дата: 20.02.2007 20:23:41
Dancing-master
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
select ..., (select max(sys_connect_by_path) from обратное дерево от текущего узла) as reversed_path
from ...
RA\/EN
Дата: 21.02.2007 08:37:18
Elic
Dancing-master
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот (запрос при этом не перестраивать)?
select ..., (select max(sys_connect_by_path) from обратное дерево от текущего узла) as reversed_path
from ...

LIO возрастет минимум в 2 раза.
Может, имеет смысл написать собственную функцию, которая разобъет строку на токены и перестрит их в обратном порядке?
Elic
Дата: 21.02.2007 08:52:42
RA\\/EN
LIO возрастет минимум в 2 раза.
Пока не вижу в этом проблемы :)
RA\\/EN
Может, имеет смысл написать собственную функцию, которая разобъет строку на токены и перестрит их в обратном порядке?
А возможно эффективней будет модифицированное и доработанное решение ModelR/SY.
Stax.
Дата: 21.02.2007 17:12:00
Elic
Stax.
Dancing-master
Можно ли в иерархическом запросе вывести SYS_CONNECT_BY_PATH в обратном порядке, т.е. от корня к листочка а наоборот
SQL> select reverse('123') from dual;--побайтно
И что по твоему должно получиться из прямого пути \Станислав\гонит\пургу ? :)

спасиб
действительно не работает
SQL> select reverse('\Станислав\гонит\пургу') from dual;

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

SQL> 
влоб
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
orawish
Дата: 21.02.2007 19:18:21
Stax.
..
действительно не работает
....
stax

(там, где реверс в шоколаде ;)
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;
Elic
Дата: 21.02.2007 19:31:47
orawish
select reverse(sys_connect_by_path(reverse(s),'/')) cba
Прикольно!