Частичное SUBSTR
не кажется лучшим вариантом; Я бы посоветовал вам разбить эту строку значений, разделенных двоеточиями, на строку следующим образом:
SQL> with test (col) as
2 (select '1:15:2:3' from dual)
3 select regexp_substr(col, '[^:]+', 1, level) one_value
4 from test
5 connect by level <= regexp_count(col, ':') + 1;
ONE_VALUE
--------------------------------
1
15
2
3
SQL>
и используйте такую опцию в своем запросе; как то так:
select ...
into ...
from some_table t
where t.id in (select regexp_substr(that_string, '[^:]+', 1, level) one_value
from dual
connect by level <= regexp_count(that_string, ':') + 1
);
Если он должен быть построчным, используйте вышеуказанную опцию в качестве источника для цикла FOR курсора, например
for cur_r in (select regexp_substr(that_string, '[^:]+', 1, level) one_value
from dual
connect by level <= regexp_count(that_string, ':') + 1
)
loop
do_something_here
end loop;