Es por tu expresión regular. Cámbielo para buscar solo caracteres alfabéticos consecutivos:
select regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null
También funciona para caracteres individuales:
select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;
Has comentado:
Por favor, siempre ponga toda la información en la pregunta para empezar, por favor.
Parece que está buscando dividir en un carácter de nueva línea (retorno de carro o retorno de carro/salto de línea)
En cuyo caso, está buscando dividir donde algo no uno de estos personajes. He usado todos los caracteres de control aquí porque soy perezoso, pero funcionará para los datos proporcionados. Si tiene algunos personajes de Bell, esto no funcionará, tendrá que ser más específico.
with the_data as (
select 'a
b
c' as dat
from dual
)
select regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level)
from the_data
connect by regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level) is not null;