Het komt door je reguliere expressie. Wijzig het om slechts . te zoeken opeenvolgende alfabetische tekens:
select regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null
Het werkt ook voor losse tekens:
select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;
Je hebt gereageerd:
Gelieve altijd eerst alle informatie in de vraag te vermelden.
Het lijkt erop dat u wilt splitsen op een teken van een nieuwe regel (carriage return of carriage return/line feed)
In dat geval wil je opsplitsen waar iets niet is een van deze karakters. Ik heb hier alle controletekens gebruikt omdat ik lui ben, maar het zal werken voor uw verstrekte gegevens. Als je een aantal Bell-tekens hebt, werkt dit niet, je moet specifieker zijn.
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;