Отстраняване на този метод за разделяне на низ, като се допускат нулеви стойности:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');
REGEXP_SUBS
-----------
A
B
C~D^E
Както в свързания отговор, той търси всякакви знаци, без алчност, последвано от комбинацията от ~^ (с избягала карета, така че ~\^ ) или край на реда. regexp_substr() calls също използва незадължителните аргументи, за да укаже subexpr - така че получава само първото групиране (.*? ), а не самият разделител, който е във втората група.
Ако искате конкретен елемент, това е още по-близо до свързаната публикация:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Или докато правите това в процедура, използвайте заявката за свързване, за да попълните колекция и след това изберете елемента, от който се нуждаете, ако ще разглеждате повече от един.