【发布时间】:2011-06-10 23:01:54
【问题描述】:
我有一个有效的过程,其中包含一个 insert..select 语句。现在有一种情况,执行此过程会从该语句中产生“ORA-00904: : invalid identifier”错误。这在理论上怎么可能?没有触发器或动态 SQL。
此外,sqlerrm 中的 ORA-00904 文本没有指向 Oracle 认为无效的任何特定标识符的指针。
Oracle 版本 9.2.0.8
编辑2:
原来从该选择中调用的函数存在问题(将其替换为常量并且一切正常)。可能这就是 ORA-00904 没有给出标识符的原因。尽管如此,问题仍然存在 - 没有动态 sql 的预编译代码怎么会出现这个错误?
【问题讨论】:
-
你能发布一些示例代码吗!
-
有意见吗?从你所说的我猜你有一个打印
SQLERRM的所有错误(when others)的异常处理程序;如果您没有,无论如何都会引发异常,并会提供有关它来自何处的更多信息。 -
您确定的函数,以及依次调用的任何函数,也没有动态 SQL?链中是否有
authid current_user子句,这可能会影响编译和运行时之间的行为(特权和分辨率)?您是否依赖任何不适用于包的角色授予的权限? -
“现在有一种情况……”是不是意味着它并不总是产生这个错误?
-
@Rene 它仅在一种特定情况下产生该错误。我们解决了这个问题(没有代码更改,没有数据更改),我们再也没有看到这个问题。