En éliminant cette méthode pour diviser une chaîne tout en autorisant les valeurs nulles :
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
Comme dans la réponse liée, il recherche tous les caractères, non gourmands, suivis de la combinaison de ~^
(avec le caret échappé, donc ~\^
) ou fin de ligne. Le regexp_substr()
appels utilise également les arguments optionnels pour spécifier subexpr
- donc il n'obtient que le premier groupement (.*?
) et non le délimiteur lui-même, qui se trouve dans le deuxième groupe.
Si vous voulez un élément spécifique, c'est encore plus proche de la publication liée :
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Ou, comme vous le faites dans une procédure, utilisez la requête connect-by pour remplir une collection, puis sélectionnez l'élément dont vous avez besoin, si vous envisagez d'en consulter plusieurs.