Цикл по значениям строки, указанным через разделитель

Help_please
Дата: 04.12.2009 05:43:51
Здравствуйте!
Подскажите пожалуйста, как мне пробежать циклом по всем значениям строки, указанным через разделитель, может кто-то уже реализовывал подобное...
В строке через разделители указаны только числа, никаких символов.
Пример строки: 0|0|1|2|1|2|10|22|34|-|-|-|-|15|0|105|66|73|-|
Help_please
Дата: 04.12.2009 05:44:39
Поправка: из символов может быть только '-'
Тынц.
Дата: 04.12.2009 05:54:11
select a
, level i
, 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, '|'))
Или тот же substr/instr в цикле на PL/SQL
Help_please
Дата: 04.12.2009 06:38:05
А если надо расположить значения в обратном порядке (с конца)?
Добрый Э - Эх
Дата: 04.12.2009 07:24:09
Расположить где? В итоговой выборке?
Или нужно на основании входной строки сформировать другую строку, в которой элементы будут расположены в обратном порядке?
Добрый Э - Эх
Дата: 04.12.2009 07:38:34
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
Kraft_o
Дата: 04.12.2009 09:29:41
WITH t AS (SELECT '0|0|1|2|1|2|10|22|34|-|-|-|-|15|0|105|66|73|-|' input FROM dual)
select v.input
from (SELECT REGEXP_SUBSTR(input, '[^|]+', 1, level) input FROM t CONNECT BY INSTR(input, '|', 1, level) > 0) v
Kraft_o
Дата: 04.12.2009 09:54:09
В обратном порядке
WITH t AS (SELECT '0|0|1|2|1|2|10|22|34|-|-|-|-|15|0|105|66|73|-|' input FROM dual)
select v.input
from (SELECT REGEXP_SUBSTR(input, '[^|]+', 1, level) input FROM t CONNECT BY INSTR(input, '|', 1, level) > 0) v
order by rownum desc
-2-
Дата: 04.12.2009 10:00:32
Help_please
Подскажите пожалуйста, как мне пробежать циклом по всем значениям строки, указанным через разделитель,
а чего все кинулись писать SQL? По предоставленной информации я бы предложил loop.
Babe_Vampire
Дата: 04.12.2009 11:00:42
Чтобы "подзапросов" не сделать случайно, а то в последнее время эпидемия какая-то пошла на их боязнь
----
Oracle 11.1.0.7 - 64bit - SLES10