Die Verwendung von COUNT(*) ist in Ordnung, wenn Sie auch rownum=1:
verwendendeclare
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;
Dadurch wird immer eine Zeile zurückgegeben, sodass keine NO_DATA_FOUND-Ausnahme behandelt werden muss. Der Wert von l_cnt ist 0 (keine Zeilen) oder 1 (mindestens 1 Zeile vorhanden).