jueves, 31 de marzo de 2011

ORA-01403: no data found,ORA-01403: no data found ,ORA-23494: too many rows and Select Into

ORA-01403: no data found ,ORA-23494: too many rows for destination and Select Into
ORA-01403: no data found
Cause: In a host language program, all records have been fetched. The return code from the fetch was +4, indicating that all records have been returned from the SQL query.

Action: Terminate processing for the SELECT statement.

ORA-23494: too many rows for destination "string"
Causa: The specified destination has too many rows
Acción: Ensure the specified destination has at most two valid rows before retrying this operation.

Esto es lo que encuentras al buscar este error.

no data found, Como olvidar este error, y aqui te presento a uno de los principales culpables:

Select datos
Into variables
from tabla

Dentro de las mas grandes bendiciones/maldiciones que existen en pl/sql esta esta bendita/maldita sentencia, porque se preguntaran?, bueno pues resulta de que cuando te enseñan esta sentencia, debería venir de la mano con un manual de por que deberías evitar utilizarla, a que me refiero:

Cuando tu utilizas la sentencia select into , significa que de manera directa deseamos obtener información de la base y que nos la deposite dentro de variables en nuestro código, que utilizado correctamente nos puede ahorrar algunas lineas de código dentro de nuestros procedimientos, sin embargo si no estas absoluta y completamente seguros de que tu consulta siempre regresara uno y solo un registro, en caso de que no estés seguro de lo anterior, tu proceso debería estar preparado para lo peor.

es decir deberia por lo menos agregar el siguiente codigo:

begin
Select datos
Into variables
from tabla
exceptions
when no_data_found then
/*lo que quieras hacer cuando no encuentre datos*/
when too_many_rows
/*lo que quieras hacer cuando encuentre mas de un registro */
end;



Espero este pequeño ejemplo sea útil.

No hay comentarios:

Publicar un comentario