I am confused as to the proper way to get an accurate count of rows not found on a SELECT inside a cursor loop, and when to use SQLROWCOUNT, etc. In the code piece below, if I increment the 'not found' counter WHEN NO_DATA_FOUND, I get a very different count from when I say "NULL" at that point, and then increment the counter based on checking the INTO variable being null. What's the best way to do this in cursor loops? Thanks in advance....

FOR sp_null_rec IN sp_null_cur
LOOP
BEGIN

SELECT premise_id
INTO v_premise_id
FROM cisif_service_point
WHERE sp_id = sp_null_rec.sp_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
/* v_counter_3 := v_counter_3 + 1; */

WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM || ' FOR ' || sp_null_rec.sp_id);
END;

EXIT WHEN sp_null_cur%NOTFOUND;

IF v_premise_id is null THEN
v_counter_3 := v_counter_3 + 1;
END IF;
END LOOP;