Le * l'opérateur est 'gourmand' par défaut
. Vous autorisez tous les caractères entre distinct et ) , en toute quantité. et incluant le premier ) lui-même.
Comme suggéré par EatÅPeach, vous pouvez le rendre non gourmand avec ? :
Alors ici, avec .*? au lieu de .* :
select regexp_substr(
'select count(distinct empno), count(distinct deptno) from emp',
'count\(distinct.*?\)')
from dual;
Ou vous pouvez spécifier qu'il doit s'agir de n'importe quel caractère sauf ) avec [^)]* au lieu de .* .
select regexp_substr(
'select count(distinct empno), count(distinct deptno) from emp',
'count\(distinct[^)]*\)')
from dual;