La gestión de excepciones es simple, cuando hay un error en el código, el parser se mueve hacia el bloque EXCEPTION más próximo. En tu caso, aún cuando dividir por cero tenga como resultado la tendencia a infinito, tienes el error en SELECT 1/0 INTO.. (las bases de datos son de matemática simple), esto produce el salto hacia el código exception, y en consecuencia, la sentencia SELECT 3/1 INTO RESULT_3 no se ejecuta dejando la variable result_3 sin valor.
Código:
DECLARE
err_num NUMBER;
err_msg VARCHAR2(255);
result NUMBER;
RESULT_2 NUMBER;
RESULT_3 NUMBER;
BEGIN
SELECT 2/1 INTO RESULT_2
FROM DUAL;
DBMS_OUTPUT.PUT_LINE ('VALOR :'||RESULT_2);
SELECT 1/0 INTO
result
FROM DUAL;
SELECT 3/1 INTO RESULT_3
FROM DUAL;
EXCEPTION
WHEN OTHERS THEN
err_num := SUBSTR (SQLCODE,2,5);
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||err_num);
DBMS_OUTPUT.put_line(err_msg);
dbms_output.put_line ('Nuevo Valor: '|| result_3)
END;
Saludos