Ecco a te:
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
Tecnicamente, se la stringa che vuoi controllare contiene solo il carattere che vuoi contare, la query precedente restituirà NULL; la seguente domanda darà la risposta corretta in tutti i casi:
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
Lo 0 finale in coalesce
rileva il caso in cui stai contando in una stringa vuota (cioè NULL, perché length(NULL) =NULL in ORACLE).