Tengo un procedimiento que es válido y tiene una instrucción insert..select. Ahora hay un caso donde la ejecución de este procedimiento produce el error "ORA-00904: identificador inválido" de esta declaración. ¿Cómo es eso incluso teóricamente posible? No hay disparadores o SQL dinámico.¿Cómo puedo obtener "ORA-00904: identificador inválido" de un paquete válido?
Además, el texto ORA-00904 en sqlerrm no tiene ningún puntero a ningún identificador específico que Oracle considere no válido.
versión de Oracle 9.2.0.8
Edit2:
Resulta que había un problema con una función que se llama desde dentro de ese selecto (reemplazó con constantes y todo funcionaba). Probablemente esa fue la razón por la que ORA-00904 no dio un identificador. Aún así, la pregunta sigue siendo: ¿cómo puede ser que el código precompilado sin sql dinámico proporcione este error?
¿Puede publicar algún código de ejemplo, por favor? – Tim
¿Hay alguna vista? Por lo que has dicho, supongo que tienes un manejador de excepciones para todos los errores ('cuando otros') que imprimen' SQLERRM'; si no lo tiene, la excepción se levantará de todos modos y le dará más información sobre de dónde viene. –
¿La función que identificó y todo lo que llamó a su vez tampoco tenía SQL dinámico? ¿Hay algo en la cadena que tenga una cláusula 'authid current_user', que podría afectar el comportamiento entre compilación y tiempo de ejecución (privilegios y resolución)? ¿Confía en los privilegios otorgados por la función, que no se aplican en los paquetes? –