Det er på grund af dit regulære udtryk. Skift det til at søge efter bare på hinanden følgende alfabetiske tegn:
select regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null
Det virker også for enkelte tegn:
select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;
Du har kommenteret:
Angiv venligst altid alle oplysningerne i spørgsmålet til at begynde med.
Det ser ud til, at du søger at opdele på et linjeskifttegn (vognretur eller vognretur/linjefeed)
I så fald søger du at opdele, hvor noget ikke er en af disse karakterer. Jeg har brugt alle kontroltegn her, fordi jeg er doven, men det vil fungere for dine angivne data. Hvis du har nogle Bell-karakterer, vil dette ikke virke, du skal være mere specifik.
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;