Рассмотрим:
regexp_replace(mycol,'0+','-', 1, 1)
Обоснование: пятый параметр, который больше 0, указывает, какое событие следует заменить;когда он установлен в 0, все вхождения заменяются.
Другие заметные изменения в вашем исходном регулярном выражении:
- круглые скобки определяют группу захвата;так как вам не нужно захватывать, есть лишние
- скобки, определяющие класс символов;не требуется, поскольку вы сопоставляете один символ
Демонстрация на DB Fiddle :
with a as (
select '30000001174934177910' mycol from dual
union all select '30000000174934177910' from dual
union all select '301873130520' from dual
union all select '300173130520' from dual
)
select mycol input, regexp_replace(mycol,'0+','-', 1, 1) output from a
INPUT | OUTPUT
:------------------- | :--------------
30000001174934177910 | 3-1174934177910
30000000174934177910 | 3-174934177910
301873130520 | 3-1873130520
300173130520 | 3-173130520