oracle的ora 00904,关于oracle:如何从有效的软件包中获取“ ORA-00904::无效标识符”?...

我有一个有效的过程,并且在其中有一个insert..select语句。 现在,存在一种情况,该过程的执行会从此语句中产生" ORA-00904 ::无效标识符"错误。 从理论上讲这怎么可能? 没有触发器或动态SQL。

另外,sqlerrm中的ORA-00904文本没有指向Oracle认为无效的任何特定标识符的指针。

Oracle 9.2.0.8版

编辑2:

事实证明,在该select中调用的函数存在问题(将其替换为常量,并且一切正常)。 可能是ORA-00904没有提供标识符的原因。 尽管如此,问题仍然存在-没有动态sql的预编译代码怎么会出现此错误?

您可以张贴一些示例代码吗?

有意见吗? 根据您所说的话,我猜您已经为打印SQLERRM的所有错误(when others)获得了异常处理程序; 如果您没有,无论如何都会引发异常,并且会提供有关异常源的更多信息。

您确定的函数以及依次调用的任何函数也没有动态SQL? 链中是否有任何authid current_user子句,这可能会影响编译和运行时之间的行为(特权和解析)? 您是否依赖于任何不授予角色的角色授予的priv?

"现在有一种情况……"是否意味着它并不总是产生此错误?

@Rene仅在一种特定情况下才产生该错误。 我们解决了这个问题(没有代码更改,没有数据更改),并且我们再也没有看到过这个问题。

您是否使用一些负载平衡的环境?

我认为,当您访问一个有效但实体需要编译并引发异常的软件包时,可能会发生这种错误。

另一个原因可能是带有authid current_user的代码,它以当前用户的特权运行(而不是拥有用户特权的正常运行)。 这样的过程可能在一次调用时失败,而在另一用户执行时成功。

由于您已经找到了解决方案,所以这不是您的问题。 但我想补充一点,如果包函数具有主体,但在规格表中没有函数签名,则会出现此错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值