* операторът е „алчен“ по подразбиране
. Позволявате всякакви знаци между distinct и ) , във всякакви количества. и включително първия ) себе си.
Както предложи EatÅPeach, можете да го направите неалчен с ? :
Така че тук, с .*? вместо .* :
select regexp_substr(
'select count(distinct empno), count(distinct deptno) from emp',
'count\(distinct.*?\)')
from dual;
Или можете да посочите, че трябва да бъде произволен знак освен ) с [^)]* вместо .* .
select regexp_substr(
'select count(distinct empno), count(distinct deptno) from emp',
'count\(distinct[^)]*\)')
from dual;