Możesz używać funkcji w klauzuli order-by. W takim przypadku możesz podzielić nienumeryczne i numeryczne części pola i użyć ich jako dwóch kryteriów porządkowania.
select * from t
order by to_number(regexp_substr(a,'^[0-9]+')),
to_number(regexp_substr(a,'[0-9]+$')),
a;
Możesz również utworzyć indeks oparty na funkcjach, aby to wspierać:
create index t_ix1
on t (to_number(regexp_substr(a, '^[0-9]+')),
to_number(regexp_substr(a, '[0-9]+$')),
a);