Los expertos en bases de datos reconocerán el nombre de Oracle como una potencia en el mundo del sistema de gestión de bases de datos relacionales (DBMS). Oracle ha producido soluciones DBMS de muy alta potencia durante décadas y sigue siendo un líder en el campo. Muchos usuarios finales de productos de bases de datos pueden confundirse o confundirse cuando utilizan una solución prediseñada y genera un mensaje de error. Un mensaje de error común producido por Oracle es el error ORA-06512.
Consulte también nuestro artículo Cómo solucionar el error ora-00942
Oracle es un sistema de gestión de bases de datos que ha existido durante cuarenta años en varias formas. Originalmente usó algo llamado esquema SCOTT, llamado así por uno de los empleados originales de Oracle. Incluso iniciaste sesión en Oracle por primera vez con el nombre de usuario 'scott' y la contraseña 'tiger' que lleva el nombre del gato de Scott. Ahora hay varios esquemas utilizados dependiendo de para qué use Oracle.
Si desea obtener más información sobre Oracle desde cero, esta página es muy útil.
Reparación de errores ORA-06512
En Oracle, un error de ORA-06512 es un error de excepción general que le indica dónde algo anda mal. Es uno de los errores menos específicos producidos por Oracle, ya que solo le dice que hay un problema, pero no lo que está saliendo mal.
Por ejemplo, un mensaje de error típico podría leer:
"ORA-01422: la búsqueda exacta devuelve más de la cantidad solicitada de filas
ORA-06512: en "DATABASE_NAME", línea 66
ORA-06512: en la línea 1 ″
La primera línea le dice qué tipo de error está ocurriendo, en este caso, la consulta está devolviendo más datos de los que espera, por lo que no sabe cómo manejarlos. El código 'ORA-01422' es el código de error real que debe tener en cuenta. El ORA-06512 es solo el código de error general.
La segunda línea le dice dónde está ocurriendo el error. DATABASE_NAME será la base de datos en la que esté trabajando en ese momento. La línea 66 es la línea donde está ocurriendo el error y es la línea que debe verificar para corregir el error.
La tercera línea en la sintaxis de error le indica de dónde proviene la llamada. Verifique la línea uno y verá una llamada a DATABASE_NAME.
Para corregir este error en particular, debe solucionar el problema causado por ORA-01422, que es 'la recuperación exacta devuelve más del número de filas solicitado' o debe agregar un controlador de excepción para indicarle a Oracle que lo ignore. Como siempre es preferible solucionar el problema central, este es el camino a seguir.
Hay dos cosas que puedes hacer. Si espera que la consulta devuelva más de una sola fila, puede modificarla para que no se sorprenda. Si solo espera que la consulta devuelva una sola fila, también puede modificarla para eso.
Esperando más de una fila:
para X en (seleccione * de t donde …)
lazo
- procesa el registro X aquí
bucle final
Esto debería erradicar el error en las consultas de la base de datos donde se devolvería más de una fila.
Si solo espera que se devuelva una sola fila, puede intentar:
empezar
seleccione * en …
de t donde …
proceso….
excepción
cuando NO_DATA_FOUND entonces
código de manejo de errores cuando no se encuentra ningún registro
cuando TOO_MANY_ROWS entonces
código de manejo de errores cuando se encuentran demasiados registros
fin;
Este segundo método debe entregar solo la fila única sin arrojar el error 'ORA-01422: la recuperación exacta devuelve más que el número de filas solicitado' y, por lo tanto, el error original ORA-06512.
También puede ajustar la consulta para que solo devuelva la primera fila de una respuesta de varias filas. Esto podría funcionar si no tiene un control completo sobre la base de datos o no desea meterse demasiado con las cosas, pero aún necesita una respuesta.
declarar
cursor c1 para seleccionar * de t donde …
empezar
abrir c1;
buscar c1 en ..
si (c1% no encontrado) entonces
manejo de errores para ningún registro encontrado
terminara si;
cerrar c1;
fin;
(Si conoce SQL, puede estar un poco confundido por estas líneas de comando … Oracle no usa Transact-SQL sino que es su propia extensión de lenguaje de procedimiento de SQL, PL / SQL. Si bien es similar a Transact-SQL, PL / SQL sí lo hace muchas cosas inteligentes y es una herramienta muy poderosa en sí misma. Puede encontrar estas preguntas frecuentes de PL / SQL útiles cuando intente aprender sobre Oracle).
Entonces, la lección básica aquí es que un error ORA-06512, en sí mismo, no es algo que pueda solucionar directamente. En su lugar, debe averiguar cuál es el error real, que los otros códigos de error le dirán, y luego abordar esos errores uno por uno.
¿Tiene algún consejo o truco de Oracle para compartir? ¡Háganos saber sobre ellos en los comentarios!
