Acabo de encontrar un comportamiento extraño en Oracle donde espero que ORA-00918 se eleve, pero no es así. Tome esta consulta, por ejemplo.¿Por qué Oracle no plantea "ORA-00918: columna ambiguamente definida" para esta consulta?
SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Esta consulta está teóricamente en busca de los detalles de las tablas con los disparadores con discapacidad, pero tenga en cuenta que este no es el problema que estoy tratando de resolver. El problema no es exclusivo de esta consulta, el diccionario de datos, las vistas o las tablas; Hasta donde yo sé, se aplica a cualquier conjunto de tablas o vistas (de las dos o tres que he probado).
De todos modos, intenta ejecutar esta consulta y se obtiene ORA-00918 porque ambos USER_TABLES
y USER_TRIGGERS
tienen una columna llamada STATUS
así que para obtener la consulta para ejecutar la cláusula de WHERE
necesita ser cambiado a TRG.STATUS
. Ok, genial, pero intenta unirte a otra mesa.
SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
JOIN USER_CONSTRAINTS CON ON CON.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
¡Esta consulta, sin calificar a qué columna de ESTADO quiere decir, funciona mágicamente! No importa la semántica o lo que devuelve la consulta, no hay ningún error. USER_CONSTRAINTS
incluso tiene una columna llamada STATUS
también, entonces ¿cómo es que no sabe qué hacer cuando hay dos columnas para elegir pero está bien con aún más ambigüedad?
Todo esto está en la 10.2.0.3.0 por cierto, y en esencia ORA-00918 deja de subir si tiene más de dos tablas en su consulta. Si se trata de un error de Oracle, ¿alguien sabe cuándo fue corregido y, por lo tanto, qué versión de Oracle puede hacer que las consultas de los vaqueros exploten si nuestra base de datos se actualiza?
actualización
Gracias a BQ para demostrar el error se corrige en 11.2.0.1.0. ¡Bounty para cualquiera que pueda mostrarlo corregido en una versión anterior!
muy buena pregunta de hecho, puede 'seleccionar distinto estado' en la segunda consulta, y' seleccionar distinto tab.status' y obtendrá resultados diferentes. – Benoit
Veo el mismo comportamiento 9.2.0.8.0 y 10.2.0.4.0 –
Me he sentido molesto por este problema anteriormente. No se pudo explicar por qué una columna de clave ahora tenía nulos después de la unión externa a otra tabla. Es bueno ver que no soy el único! Y me alegra ver que está arreglado en 11g. –