O aun se puede hacer como te dijo tu maestro sin declararla, pero si te fijas en los ejemplos, en tu caso no estas indicando que se lanzo una excepcion, te faltaria:
Código SQL:
Ver originalCREATE OR REPLACE PROCEDURE MUESTRADATOSMECANICOS3
(v_puesto IN mecanicos.puesto%TYPE)
IS
v_datos mecanicos%rowtype;
cursor c_datos IS
SELECT * FROM mecanicos WHERE puesto = v_puesto;
BEGIN
IF NOT c_datos%isopen THEN
OPEN c_datos;
IF c_datos%NOTFOUND THEN
EXCEPTION
RAISE_APLICATION_ERROR(-20000,'No existe mecánicos con el puesto');
END IF;
END IF;
FETCH c_datos INTO v_datos;
WHILE c_datos%FOUND
LOOP
dbms_output.put_line('dni: ' || v_datos.dni);
dbms_output.put_line('nombre: ' || v_datos.nombre);
dbms_output.put_line('salario: ' || v_datos.salario);
FETCH c_datos INTO v_datos;
END LOOP;
CLOSE c_datos;
END MUESTRADATOSMECANICOS3;
saludos!