我有一个有效的过程,并且在其中有一个insert..select语句。现在,存在一种情况,该过程的执行会从此语句中产生“ ORA-00904 ::无效标识符”错误。从理论上讲这怎么可能?没有触发器或动态SQL。
另外,sqlerrm中的ORA-00904文本没有指向Oracle认为无效的任何特定标识符的指针。
Oracle 9.2.0.8版
编辑2:
事实证明,在该select中调用的函数存在问题(将其替换为常量,并且一切正常)。可能是ORA-00904没有提供标识符的原因。尽管如此,问题仍然存在-没有动态sql的预编译代码怎么会出现此错误?
最佳答案
我认为,当您访问某个包有效但该程序包需要编译并引发异常的包时,可能会发生这种错误。
另一个原因可能是具有authid current_user的代码,它以当前用户的特权运行(而不是拥有用户特权的正常运行)。这样的过程在被一个用户调用时可能失败,而在被另一个用户执行时成功。