Необходимо написать это как новый ответ, так как он слишком велик для комментария к @SmartDumb:
Имейте в виду, что регулярное выражение в форме '[^;]+'
(обычно используется для анализа списков с разделителями) завершается неудачно, когда NULLэлементы находятся в списке.Пожалуйста, смотрите этот пост для получения дополнительной информации: https://stackoverflow.com/a/31464699/2543416
Вместо этого, пожалуйста, используйте эту форму вызова regexp_substr (обратите внимание, я удалил второй элемент):
SELECT TRIM(regexp_substr('bbb;;qqq;ccc','(.*?)(;|$)',1,level, null, 1) ) AS q
FROM dual
CONNECT BY regexp_substr('bbb;;qqq;ccc','(.*?)(;|$)',1,level) IS NOT NULL
ORDER BY level
Может или не можетВажно, чтобы в этом примере это зависело от того, имеет ли значение порядок элементов в строке для вас или вам нужно сохранить значение NULL.то есть, если вам нужно знать, что второй элемент - NULL, тогда это будет работать.
PS Выполните поиск внешних таблиц и посмотрите, можете ли вы использовать это решение.Это позволит вам запросить файл, как если бы он был таблицей.