Предупреждение: синтаксический анализ строки с использованием общего регулярного выражения '[^,]+'
не возвращает ожидаемое значение, если в списке есть элемент NULL.Элементы будут в неправильном положении после элемента NULL.Обратите внимание, что второй элемент имеет значение NULL, но в результирующем наборе элементы возвращаются в неправильных местах:
SQL> select level, regexp_substr('emp,,bonus,salgrade','[^,]+',1,level) as tableName
from dual
connect by LEVEL <= REGEXP_COUNT('emp,,bonus,salgrade' ,',') + 1;
LEVEL TABLENAME
---------- -------------------
1 emp
2 bonus
3 salgrade
4
Используйте вместо этого эту форму REGXP_SUBSTR (), которая обрабатывает NULL:
SQL> select level, regexp_substr('emp,,bonus,salgrade','(.*?)(,|$)',1,level, NULL, 1) as tableName
from dual
connect by LEVEL <= REGEXP_COUNT('emp,,bonus,salgrade' ,',') + 1;
LEVEL TABLENAME
---------- -------------------
1 emp
2
3 bonus
4 salgrade
См. Этот пост для получения дополнительной информации