2011-01-18 11 views
5

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?

+5

¿Puede publicar algún código de ejemplo, por favor? – Tim

+2

¿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. –

+5

¿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? –

Respuesta

2

Creo que este tipo de error puede ocurrir cuando se accede a un paquete donde el paquete es válido pero el cuerpo necesita compilación y arroja la excepción.

Otra razón podría ser un código con authid current_user que se ejecuta con los privilegios del usuario actual (no es lo normal con los privilegios del usuario propietario). Tal procedimiento puede fallar cuando se llama con uno y tiene éxito cuando se ejecuta con otro usuario.

0

Como ya encontraste la solución, este no era tu problema. Pero quería agregar una nota, que obtiene este error si la función de paquete tiene un cuerpo, pero no hay una firma de función en la hoja de Especificaciones.

Cuestiones relacionadas