To z powodu twojego wyrażenia regularnego. Zmień to, by szukać tylko kolejne znaki alfabetu:
select regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null
Działa również dla pojedynczych znaków:
select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;
Skomentowałeś:
Na początku zawsze umieszczaj wszystkie informacje w pytaniu.
Wygląda na to, że chcesz podzielić na znak nowej linii (powrót karetki lub powrót karetki/wysuw wiersza)
W takim przypadku chcesz podzielić się tam, gdzie czegoś nie jedną z tych postaci. Użyłem tutaj wszystkich znaków kontrolnych, ponieważ jestem leniwy, ale zadziała dla podanych danych. Jeśli masz kilka postaci Bell, to nie zadziała, musisz być bardziej szczegółowy.
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;