Saltar al contenido

¿Por qué no_data_found ORA-01403 es una excepción en Oracle?

Siéntete en la libertad de divulgar nuestra página y códigos en tus redes, ayúdanos a ampliar esta comunidad.

Solución:

El bloque de excepción no es necesariopuede usarlo o no, según el contexto.

Aquí está ignorando activamente la excepción (el procedimiento regresará con éxito), pero la mayoría de las veces, si está haciendo SELECCIONAR EN, desea que lo haga. fallar si no devuelve una fila, considere:

PROCEDURE update_employee_salary (p_empno) IS
   l_salary NUMBER;
BEGIN
   SELECT sal INTO l_salary FROM emp WHERE empno = p_empno FOR UPDATE;
   /* do something with emp data */
END;

Aquí quiero que mi función falle si se llama con un empno que no existe en la tabla EMP. Podría captar la excepción para generar un mensaje de error significativo (con raise_application_error) pero la mayoría de las veces estoy contento con el ORA-01403.

En general, las únicas excepciones que debe capturar son las excepciones esperadas (es decir, este no debería ser el estándar para capturar todos los ORA-01403, o todas las excepciones).

Pero todavía tenemos que responder a la pregunta de “¿por qué se lanza una excepción en el caso de que un SELECT no tenga datos para recuperar”.

Creo que esto se hace porque es una situación común que de otro modo podría pasarse por alto. Escribir código como si siempre esperara encontrar datos es algo común, y si se suponía que debíamos realizar comprobaciones de errores como

SELECT 
IF SQLCODE = 100 THEN -- No data found
  
END IF

es probable en mi humilde opinión que la verificación de SQLCODE = 100 se omita con frecuencia. Haber planteado una excepción te hace pensar que A) se produjo una condición importante (no se encontraron datos), y B) NO SE CONCEDIÓ NINGUNA CONCESIÓN PARA ESTO. En mi opinión, hacer que el motor PL/SQL genere una excepción es mejor que hacer que el programa continúe felizmente en su camino bajo el supuesto de que los datos se recuperaron cuando en realidad no lo fueron, lo que puede conducir a todo tipo de problemas.

Comparte y Disfruta.

Puede intentar usar MIN para evitar el uso de la cláusula EXCEPTION.

 SELECT MIN(dummy)  
   INTO dummy
   FROM dual
  WHERE dummy = 'Y'; 

entonces la variable ficticia será NULL

Si aceptas, eres capaz de dejar un ensayo acerca de qué te ha gustado de este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *