Použití COUNT(*) je v pořádku, pokud používáte také 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;
To vždy vrátí řádek, takže není třeba zpracovávat žádnou výjimku NO_DATA_FOUND. Hodnota l_cnt bude 0 (žádné řádky) nebo 1 (existuje alespoň 1 řádek).