Voilà :
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
Techniquement, si la chaîne que vous souhaitez vérifier ne contient que le caractère que vous souhaitez compter, la requête ci-dessus renverra NULL ; la requête suivante donnera la bonne réponse dans tous les cas :
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
Le 0 final dans coalesce
attrape le cas où vous comptez dans une chaîne vide (c'est-à-dire NULL, car length(NULL) =NULL dans ORACLE).