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 original- CREATE 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!