select trim('|' from max(a)) as a,
max(ltrim(sys_connect_by_path(a_i,'|'),'|'))
keep(dense_rank last order by level) as revers_a
from (
select a, level i, length(a) - length(replace(a,'|')) -1 as max_level,
substr(a, instr(a, '|', 1, level) + 1, instr(a, '|', 1, level + 1) - instr(a, '|', 1, level) - 1) a_i
from ( select '|' || '0|0|1|2|1|2|10|22|34|-|-|-|-|15|0|105|66|73|-' || '|' a from dual)
connect by level < length(a) - length(replace(a, '|'))
)
start with i = max_level
connect by prior i-1 = i
Query finished, retrieving results...
A REVERS_A
--------------------------------------------- ---------------------------------------------
0|0|1|2|1|2|10|22|34|-|-|-|-|15|0|105|66|73|- -|73|66|105|0|15|-|-|-|-|34|22|10|2|1|2|1|0|0
1 row(s) retrieved