Los comandos pueden fallar por muchas razones, incluyendo las
siguientes:
·        
Los errores de sintaxis
·        
Las referencias a objetos o columnas
inexistentes
·        
Los permisos de acceso
·        
violaciónes de restricción
·        
problemas de espacio
Como un comando SQL puede afectar a un conjunto de filas, existe la
complicación de que un comando puede tener éxito parcialmente: el fallo podría
ocurrir sólo alguna línea en el conjunto. Las anteriores tres primeras clases
de error también se aplican a las sentencias SELECT. Cuando se producen, que
deben ser detectados por la herramienta que está construyendo el SQL para ser
enviado a la base de datos: SQL * Plus o SQL Developer si se introduce el SQL
interactivamente, o cualquier otra herramienta está siendo utilizada para
generar una interfaz más sofisticada. Hay un gran número de posibles errores de
sintaxis, empezando por simples errores de ortografía o errores de
transposición.
Los errores de esta naturaleza no tendrán un impacto en la base de
datos, ya que la base de datos nunca los verá. El SQL erróneo se detiene en la
fuente. El grado de asistencia de la herramienta proporciona para la fijación
de dichos errores dependerá del esfuerzo de los desarrolladores de la
herramienta toman.
Una sentencia SQL puede ser sintácticamente correcto sino que se
refieren a objetos que no existen. Los problemas más comunes son los errores de
ortografía, pero hay cuestiones más complejas: una declaración podría hacer
referencia a una columna que existió en un tiempo, pero se ha eliminado de la tabla
o cambiado de nombre la tabla. Una declaración de esta naturaleza será enviado
a la base de datos y fallará, antes la base de datos intenta su ejecución. Esto
es peor para la base de datos que un simple error de sintaxis, pero la
sentencia se detiene antes de que consuma todos los recursos importantes bases
de datos.
Un error relacionado tiene que ver con la conversión de tipos. SQL es
un lenguaje fuertemente tipado: columnas se definen como un tipo de datos
determinado, y un intento de introducir un valor de un tipo de datos diferente
fallará. Sin embargo, puede salirse con la suya porque la implementación de
Oracle de SQL, en algunas circunstancias, hacer conversión de tipo automático. Algunas
herramientas de terceros pueden ser más útiles que ofrece corrección automática
de errores.
Si una sentencia es sintácticamente correcta y no tiene errores con
los objetos a los que se refiere, todavía puede fallar debido a los permisos de
acceso. Si el usuario intenta ejecutar la sentencia no tiene los permisos
correspondientes en las tablas a las que se refiere la base de datos devolverá
un error idéntico al que se devuelve si el objeto no existe. En lo que se
refiere al usuario, que no existe.
Los errores causados por permisos de acceso son un caso en el que
las sentencias SELECT y DML pueden devolver resultados diferentes: es posible
que un usuario tiene permiso para ver las filas de una tabla, pero no insertar,
actualizar o borrar. Esta disposición no es raro, a veces tiene sentido para
los negocios. Tal vez más confusa, los permisos se pueden configurar de tal
manera que es posible insertar filas que no se les permite ver. Y, tal vez lo
peor de todo, es posible eliminar las filas que se puede ver ni actualizar. Sin
embargo, estas disposiciones no son comunes.
Una restricción es una regla de negocio, implementado dentro de la
base de datos. Limitaciones típicas son que una tabla debe tener una clave
principal: un valor de una columna ( o combinación de columnas ) que puede
identificar de forma única cada fila. Un comando INSERT puede insertar varias
filas en una tabla, y para cada fila de la base de datos comprobará si una fila
que ya existe con la misma clave principal . Esto ocurre cuando se inserta cada
fila. Podría ser que las primeras filas (o los primeros millones de filas)
entran sin ningún problema, y luego la declaración golpea una fila con un valor
duplicado . En este punto se devolverá un error , y la declaración se producirá
un error . Este fracaso dará lugar a una reversión de todas las inserciones que
ya habían tenido éxito . Esto es parte del estándar SQL: una declaración debe
superar en total, o nada en absoluto . La inversión de la obra es una
reversión. Los mecanismos de la reversión se describen en la sección de este
capítulo titulada "Control de Operaciones . "
Si una declaración falla debido a problemas de espacio , el efecto es
similar . A parte de la declaración pudo haber tenido éxito antes de la base de
datos quedó sin espacio . La parte que tuvo éxito se pondrá en marcha
automáticamente . Rollback de una declaración es un asunto serio. Obliga a la
base de datos para hacer un montón de trabajo extra y por lo general se llevará
por lo menos , siempre y cuando el estado ha tomado ya (a veces mucho más) .
Comentarios
Publicar un comentario