L'utilisation de COUNT(*) est acceptable si vous utilisez également rownum=1 :
declare
l_cnt integer;
begin
select count(*)
into l_cnt
from x
where x.col_a = value_a
and x.col_b = value_b
and rownum = 1;
end;
Cela renverra toujours une ligne, donc pas besoin de gérer une exception NO_DATA_FOUND. La valeur de l_cnt sera 0 (aucune ligne) ou 1 (au moins 1 ligne existe).