Whenever an oracle error occurs code execution jumps immediately to the first exception handler in the call stack that can handle the error (if the error is too_many_rows then EXCEPTION WHEN NO_DATA_FOUND will be ignored).
If there is no handler in the current code block then it'll look in the block that contains/called the current block. If there isn't one there then it'll keep going up the levels till it finds one or ends up back at the client that submitted the DB code in the first place.
So no - if the first select errors then the 2nd select and the procedure won't run.
If that's not what you want then you need to either:
1) wrap the 1st select in a BEGIN/END with an exception handler:
EXCEPTION WHEN NO_DATA_FOUND THEN
WHEN NO_DATA_FOUND THEN ...
2) Move the 1st select to separate procedure/function that has it's own exception handler.