El ORA-01403 es el código de "no se encontraron datos". En la lectura de un cursor, solo marca el fin normal de los datos. Por eso el informe lo separa de los demás errores y, cuando es el único código del trace, muestra un hallazgo solo informativo.
Síntomas
En el Diagnóstico aparece el hallazgo n ORA-01403 (fin de datos) (FIM_DE_DADOS), con el texto Normal en bucles de lectura. y el enlace Ver errores. La gravedad es información, sin porcentaje del tiempo total.
El hallazgo aparece solo cuando el ORA-01403 es el único código de error del trace. Si hay otro código, aparece en su lugar el hallazgo de errores de Oracle en el trace, cuyo recuento deja fuera el 1403. Las ocurrencias de ORA-01403 siguen listadas en la sección Errores en los dos casos.
Causa
La tarjeta del código, en la sección Errores, resume los dos orígenes:
- En un
select ... intoen PL/SQL, la consulta no devolvió ninguna fila, y el PL/SQL lanza la excepciónNO_DATA_FOUND. - En el
fetchde un cursor, es solo el fin normal de los datos: en bucles de lectura, aparece una vez por cursor recorrido.
Solución
La mayoría de las veces, no hay nada que corregir. Para comprobarlo:
- Haga clic en Ver errores.
- En la tarjeta del ORA-01403, revise en Dónde apareció la Llamada, la Sentencia, la Prof. y las Ocurrencias de cada lugar.
Resultado: usted sabe qué sentencia genera el código y cuántas veces.
- Compare las ocurrencias con las ejecuciones de la sentencia, en Llamadas en su detalle.
Vale la pena actuar en tres casos:
- Muchas ocurrencias que vienen de un
select ... intoque pesa en el tiempo: el código comprueba la existencia fila a fila y usa la excepción para controlar el flujo. Cámbielo por un SQL que trate el conjunto, con join,existsomerge(fila a fila en PL/SQL). - La fila debería existir, como un registro que falta o una clave errónea: el error es señal de datos inconsistentes. Compruebe el dato que busca la sentencia.
- El PL/SQL oculta el error con
when others then null: el mismo bloque oculta también los demás errores. Trate elNO_DATA_FOUNDpor su nombre.
Cómo confirmar
Si cambió el código, genere el trace de la misma operación y compare las ocurrencias del ORA-01403 en Errores y la columna Inclusivo (s) de la sentencia que lo generaba, en Sentencias SQL por contribución. Con el bucle cambiado por un SQL de conjunto, los dos bajan.
En el informe
El informe de ejemplo no tiene errores, y la sección Errores solo aparece cuando el trace tiene alguno.
- Errores: la tarjeta del ORA-01403, con Qué es, Cuándo aparece, Qué hacer y Dónde apareció (errores).
- Diagnóstico: el hallazgo y el enlace Ver errores (Diagnóstico).
- Detalle de la sentencia: el cuadro Errores y la tabla Llamadas, con las ejecuciones de la sentencia (detalle de la sentencia).
- Sentencias SQL por contribución: el tiempo inclusivo de la sentencia que genera el código (sentencias SQL).